0

我有一个启用了自动回发的下拉列表。并有一个中继器,我在其中填充数据库中的复选框。

如果我将自动optback设置为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>
4

2 回答 2

4

我认为这是因为您不仅在对转发器进行数据绑定,if(!IsPostBack)而且还在回发中。因此,检查状态将被覆盖。

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

if(!IsPostBack){
   DataBindRepeater();
}

DataBindRepeater设置 DataSource 属性和DataBind中继器的方法。

您可能还想使用 ASP.NET Checkbox 控件而不是 html input type="checkbox"。只有当它是实现IPostBackDataHandler的服务器 WebControl 时,才会重新加载选中状态。

于 2011-12-19T17:50:41.417 回答
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 自动回发处理程序

(附带说明......请考虑使用 AJAX 进行像这样的动态客户端-服务器交互。自动回发会导致糟糕的用户体验,并且正如您所发现的那样,也会导致困难的开发体验。)

于 2011-12-19T17:53:05.683 回答