我有一个在 Page_Init 方法中生成动态控件的 WebForms 应用程序。其中一个控件是一个 HtmlSelect 控件,我用项目动态填充它。当它在页面上呈现时,我运行通常的 jQuery 代码,该代码使用每个列表项旁边的复选框设置此控件。
$("select[id*='team_filter']").multiselect({
nonSelectedText: 'All',
numberDisplayed: 1,
nSelectedText: 'selected',
allSelectedText: 'All'
});
然后用户检查一些项目并发布页面。
在回帖中,在 Page_Load 事件中,我使用以下代码检查了某些项目的 Selected 属性:
HtmlSelect ctrl = (HtmlSelect)this.FindControlRecursive("team_filter_1");
var firstGame = ctrl.Items.FindByValue("game_1").Selected;
var secondGame = ctrl.Items.FindByValue("game_2").Selected;
奇怪的是,当用户检查多个选项时,只有第一个在 Page_Load 上返回 true,其余的都返回 false。看起来所有其他检查项目的 ViewState 都没有返回到服务器。
这是我在 Page_Init 中的内容,记住这些是动态控件,所以我必须将它们放在 Init 中:
HtmlSelect teamfilter = new HtmlSelect();
teamfilter.ID = "team_filter_" + studioId;
teamfilter.Attributes.Add("class", "col-md-9");
teamfilter.Attributes.Add("multiple", "true");
ListItem listItem = new ListItem("All " + studioName, "studio_" + studioId);
listItem.Attributes.Add("data-type", "studio");
teamfilter.Items.Add(listItem);
listItem = new ListItem("All Games", "game_0_" + studioId);
listItem.Attributes.Add("data-type", "game");
teamfilter.Items.Add(listItem);