2011-12-19 77 views
0

我有一个启用autopostback的下拉列表。并有一个中继器,我从数据库填充复选框。Asp.NET dropdownlist autopostback

如果我选择一个值复选框失去它的价值...

对此有何解决方法时,设置自动回真呢?

下面是代码:

<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> 
+1

你在哪里填充复选框?在标记中以声明方式回传?更多细节请。代码片段会有很大的帮助。 – scartag 2011-12-19 17:48:43

回答

4

我想这是因为你被绑定的Repeater不仅if(!IsPostBack)也对回传。因此,检查的状态将被覆盖。

所以为此在Page_Load(假定C#):

if(!IsPostBack){ 
    DataBindRepeater(); 
} 

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

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

+0

我认为这是IsPostBack。 – James 2011-12-19 17:56:02

+0

@詹姆斯:是的,当然。 ;) – 2011-12-19 17:57:56

+0

我确实有!在我的加载方法回发,但仍然相同的结果。还有为什么重新绑定时,它还没有保存在数据库中呢? – James 2011-12-19 17:58:38

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处理程序被调用

(在一个侧面说明...请考虑使用一个JAX用于这种动态的客户端 - 服务器交互。 Autopostback会导致糟糕的用户体验,而且正如你发现的那样,也会给开发带来困难。)

+0

即时消息做这个不回发.. – James 2011-12-19 18:02:13

+0

@Samim:你可以显示更多的代码,然后?当你通过代码进行调试时,数据在什么时候丢失?你有ViewState禁用的控件有问题吗?还有其他值吗?如果是这样,控件之间有什么不同? – David 2011-12-19 18:03:29

+0

请检查以上评论 – James 2011-12-20 09:36:47