我在UpdatePanel中有一个列表 我以一个checkboxList控件的形式为该列表设置了一些过滤器。 checkboxList是在页面加载时动态创建的
在Ajax更新(回发)期间,复选框列表未在viewstate中填充,因此我无法获取要过滤的列表。
注意:如果我将复选框列表项直接放在标记中,则一切正常,如果列表是在回发后填充的,则不行。
protected override void OnLoad(EventArgs e)
{
if (!Page.IsPostBack)
{
foreach (var p in global.Product)
CheckListManufacurer.Items.Add(new ListItem(p, p));
}
base.OnLoad(e);
}
<form id="ProductListForm" runat="server">
<asp:ScriptManager ID="ScriptManager" runat="server" EnablePartialRendering="true"></asp:ScriptManager>
<asp:CheckBoxList ID="CheckListManufacurer" runat="server" EnableViewState="true">
<asp:ListItem Value="" Text="(All)"></asp:ListItem>
</asp:CheckBoxList>
<asp:Button id="btnTestAjax" runat="server" Text="Test" />
<asp:UpdatePanel ID="ProductsPanel" runat="server" UpdateMode="Conditional">
<Triggers>
<asp:AsyncPostBackTrigger ControlID="btnTestAjax" />
<asp:AsyncPostBackTrigger ControlID="CheckListManufacurer" />
</Triggers>
<ContentTemplate>
<sr:ProductList ID="Products" runat="server" />
</ContentTemplate>
</asp:UpdatePanel>
</form>
答案 0 :(得分:1)
如果你在Page_Load中填充列表,那么你就太晚了。
asp.net页面中的事件生命周期viewstate就在Page_PreLoad之前填充(参见:http://msdn.microsoft.com/en-us/library/ms178472.aspx)
所以如果你想将viewstate加载到控件中,你需要动态地添加到页面中,你需要在Page_Init中添加它们