Asp.NET下拉列表autopostback

时间:2011-12-19 17:43:46

标签: asp.net autopostback

我有一个启用了autopostback的下拉列表。并有一个转发器,我从数据库填充复选框。

如果我将autopostback设置为true,那么在选择值时,复选框会丢失其值......

有关此问题的解决方法吗?

以下是代码:

<asp:DropDownList ID="dropdown" runat="server"  class="pop" AutoPostBack="true" >
</asp:DropDownList>

<asp:Repeater ID="rptD" runat="server" >
        <ItemTemplate>
        <td valign="top" >
        <input type="checkbox" class="al" />
        </ItemTemplate>
        </asp:Repeater>

2 个答案:

答案 0 :(得分:4)

我认为这是因为你不仅仅是if(!IsPostBack)而且还有回发的数据绑定转发器。因此,将检查已检查状态。

所以在Page_Load(假设C#)中这样做:

if(!IsPostBack){
   DataBindRepeater();
}

DataBindRepeater是设置DataSource属性和DataBind Repeater的方法。

您可能还想使用ASP.NET Checkbox control而不是html input type="checkbox"。仅当检查状态是实现IPostBackDataHandler的服务器WebControl时才会重新加载。

答案 1 :(得分:1)

这听起来表明填充了Page_Load中的复选框。是这样的吗?如果您正在填充Page_Load中的控件,那么您将希望将其包装在条件:

if (!IsPostBack)
{
  // populate your controls from data
}

否则,每次回发都会重新填充它们。如果您有自动加载或单击按钮或在启动回发的页面上执行其他操作,则会在事件处理程序之前调用Page_Load。实际上,这种情况正在发生:

  1. 用户导航到页面
  2. Page_Load清除并填充复选框
  3. 用户选择DropDownList中的项目(触发回发)
  4. Page_Load清除并填充复选框
  5. DropDownList autopostback处理程序被称为
  6. (侧面说明......请考虑使用AJAX进行动态客户端 - 服务器交互.Autopostback会导致糟糕的用户体验,而且您发现也会带来难以开发的体验。)