ASP.NET UpdatePanel>从面板外的checbox列表中获取选定的值

时间:2010-03-29 02:56:17

标签: asp.net updatepanel viewstate

我在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>

1 个答案:

答案 0 :(得分:1)

如果你在Page_Load中填充列表,那么你就太晚了。

asp.net页面中的

事件生命周期viewstate就在Page_PreLoad之前填充(参见:http://msdn.microsoft.com/en-us/library/ms178472.aspx

所以如果你想将viewstate加载到控件中,你需要动态地添加到页面中,你需要在Page_Init中添加它们