【问题标题】:Keeping radio/checkbox values on postback?在回发时保留单选/复选框值?
【发布时间】:2012-01-06 11:37:23
【问题描述】:

ASP 对象有一些我没有得到的东西。我在更新面板中有一个按钮。在同一页面上,我有一个复选框、一个单选按钮和一个文本框(在更新面板之外)。当我点击我的按钮时,我可以访问所有这三个对象。文本框能够保留他的文本值。但是当我检查检查状态时,单选/复选框总是返回 false。

当然,我的表格比我刚才说的要复杂。它涉及 Javascript 和用户控件。我设法使用 Request.Form 来获取我的复选框/收音机的值,但我觉得这个解决方案不够简洁。

有人可以帮我找出为什么 radio/check 不会返回真正的检查状态吗?提前谢谢!

编辑: 我尝试在一个简单的 aspx 页面中进行跟踪,它似乎有效:

 <asp:CheckBox runat="server" ID="checkbox" />

    <asp:RadioButton runat="server" ID="radio1" GroupName="radio" CssClass="testRadio" />
    <asp:RadioButton runat="server" ID="radio2" GroupName="radio" CssClass="testRadio" />

    <asp:TextBox runat="server" ID="text" />


    <asp:ScriptManager runat="server">
    </asp:ScriptManager>

    <asp:UpdatePanel runat="server">
        <ContentTemplate>
            <asp:Button runat="server" ID="test_but" OnClick="test_click" />

        </ContentTemplate>
    </asp:UpdatePanel>

然后我可以访问 test_click() 中的所有属性。所以在我的真实形态中有些东西打破了其他一切。我尝试在我的测试页面中添加一些 javascript,它似乎也可以工作。

【问题讨论】:

  • 您是否在复选框/单选按钮上启用了自动回发?如果不是,回发可能只发送文本框值,并且在复选框和单选按钮上使用自动回发,它必须保留这样的值

标签: c# asp.net checkbox textbox radio-button


【解决方案1】:

这些控件的已知问题。使用 SaveViewState 和 LoadViewState 方法来存储和检索这些值。

http://www.4guysfromrolla.com/articles/110205-1.aspx

protected override void LoadViewState(object savedState)
{
    base.LoadViewState(savedState);

    if (ViewState["Checked"] != null)
        checked = (bool)ViewState["Checked"];
}

protected override object SaveViewState()
{
    ViewState["Checked"] = checked;

    return base.SaveViewState();
}

【讨论】:

  • 你确定吗?这将是一个真正的大问题,不是吗?
  • 更新答案 - 试一试。永远无法理解为什么没有更好的记录......
  • 不使用 UpdatePanel 试试?
  • 您好,感谢您的解决方案。它可能是一个非常干净的!我已经尝试过使用和不使用更新面板。唯一的问题是 SaveViewState 在按钮的回发开始之前没有被调用。我想我需要自己调用它,但是在哪里呢?如果是回发,在 page_load 中?我认为已经太晚了。
  • 不确定如何使用 UpdatePanel 进行这项工作,但对于常规表单,上述方法对我有用 :) 只需为按钮使用常规处理程序。
猜你喜欢
  • 1970-01-01
  • 2013-01-20
  • 1970-01-01
  • 2012-03-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-01-27
  • 1970-01-01
相关资源
最近更新 更多