【问题标题】:Why does a textbox lose its disabled attribute on postback but not its value attribute?为什么文本框在回发时会丢失其 disabled 属性,但不会丢失其 value 属性?
【发布时间】:2011-11-22 12:12:04
【问题描述】:

这是我的程序

<script src="Scripts/jquery-1.6.4.js" type="text/javascript" language="javascript"></script>
<script type="text/javascript" language="javascript">
   function one() {
       $(document).ready(function () {
           $('#<%= textbox.ClientID %>').attr('disabled', 'disabled');
       });
   }
   function two() {
       $(document).ready(function () {
           $('#<%= textbox.ClientID %>').attr('value', 'hello stackoverflow.com!');
       });
   }
</script>

<input type="button" value="one" onclick="one();" />
<input type="button" value="two" onclick="two();" />
<asp:TextBox ID="textbox" runat="server"></asp:TextBox>
<asp:Button ID="postbackButton" runat="server" Text="post back" />
  1. 当我点击“按钮一”时,文本框切换到禁用状态。然后我点击“回发按钮”,文本框切换为启用(它失去了我设置的内容!)。

  2. 当我单击“按钮二”时,文本框会更改其值。然后我点击“回发按钮”,文本框不会失去它的价值。

如何保持按钮的禁用状态? 如果我能在客户端做到这一点会更好..

非常感谢,卢西亚诺。

【问题讨论】:

    标签: jquery asp.net


    【解决方案1】:

    ASP.Net 通过 ControlState 为您跟踪发布的值。如果您在后面的代码中设置了 DISABLED 状态(通过 enabled=false),那么它将通过 ViewState 保留。如果您在 ASPX 页面中设置了它,那么它就是值。由于您是通过 JS 进行的,因此服务器无法知道它已被设置。

    处理此问题的一种方法是,您可以执行以下操作,例如在隐藏字段中按名称保留已禁用文本框的列表。然后在回帖中,您可以从隐藏字段中解析出值,并在后面的代码中适当地设置文本框的启用状态,让 ViewState 处理这些事情。

    【讨论】:

    • +1 我最初并没有注意到他是通过 JS 禁用的.. 这是完全错误的。
    【解决方案2】:

    原因ViewState。在页面执行期间,ASP.NET 服务器控件的每个更改的属性值都将由ViewState 保存。阅读ViewState

    【讨论】:

    • ViewState 用于服务器对控件影响的编程更改。如果在代码隐藏中将 ENABLED 属性设置为 FALSE,则 ViewState 将发挥作用。在事物的 HTML 端或通过脚本在 CLIENT 上针对控件设置的值不存储在 ViewState 中。
    【解决方案3】:

    简单的原因是您必须这样做。

    protected void Page_Load(object sender, EventArgs e)
    {
        TextBox1.Enabled = true;
    }
    protected void Button1_Click(object sender, EventArgs e)
    {
        TextBox1.Enabled = false;
    }
    

    在这里,您在 Load 事件中启用按钮,然后在单击第一个按钮时禁用它。然后你点击第二个按钮来做回发,它只会进入 Page_Load 事件并启用按钮。

    如果你只是删除 TextBox1.Enabled = true;从 Page_Load、PreInit、Init 事件中您不会看到此错误。

    不要通过 JS 启用禁用。

    【讨论】:

      【解决方案4】:

      如果textbox 带有runat="server" 属性并且如果它被禁用,那么您不能使用javascriptjquery 更改其值。它只能在服务器端更改

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-04-16
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多