【问题标题】:Asp.NET dropdownlist autopostbackAsp.NET 下拉列表自动回发
【发布时间】:2011-12-19 17:43:46
【问题描述】:

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

如果我将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>

【问题讨论】:

  • 你在哪里填充复选框?在标记中以声明方式回发?请提供更多详细信息。代码 sn-ps 会有很大帮助。

标签: asp.net autopostback


【解决方案1】:

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

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

if(!IsPostBack){
   DataBindRepeater();
}

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

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

【讨论】:

  • 我的加载方法中确实有 !postback 但结果仍然相同。还有为什么还没有保存在数据库中时要重新绑定?
  • @Samin:你注意到我的第二个提示了吗?使用 ASP.NET Checkbox 服务器控件而不是您的 html 输入,因为选中状态仅从实现 IPostBackDataHandler 的服务器控件在回发时重新加载。
  • @Tim 我在 html 复选框中使用值、名称和 id 来从数据库中显示它们。 asp 复选框的值和名称的等价物是什么,因为它说它是无效的属性?
  • @Samim:ASP.NET-Checkbox 没有 value 属性。但如果您真的需要,请手动添加:CheckBox1.InputAttributes.Add("Value", 2);。如果您在客户端但在服务器端不需要此属性,请使用CheckBox1.Attributes.Add("Value", 2);。这不会呈现为 html,而是存储在 ViewState 中并可以从服务器端访问。
  • @Samim:您可能还想查看 CheckBoxList control 作为中继器-复选框组合的替代方案。
【解决方案2】:

这听起来表明在 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 进行像这样的动态客户端-服务器交互。自动回发会导致糟糕的用户体验,并且正如您所发现的那样,也会导致困难的开发体验。)

【讨论】:

  • @Samim:那你能显示更多代码吗?当您通过代码进行调试时,值在什么时候丢失?您是否为相关控件禁用了 ViewState?是否保留任何其他值?如果是这样,控件之间有什么不同?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-06-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-05-12
  • 2011-02-24
相关资源
最近更新 更多