【问题标题】:Client-side JS and ASP.NET Postback客户端 JS 和 ASP.NET 回发
【发布时间】:2009-04-20 23:42:34
【问题描述】:

我有一些设置表单字段的客户端 JavaScript。当页面回发时,这些字段会被重置。

这是为什么?回传发生时,字段值不是被捕获并放入ViewState中吗?

编辑:当我在 Page_Load() 上中断调试器时,在回发后执行任何代码之前,表单字段值为空。

【问题讨论】:

    标签: asp.net javascript postback


    【解决方案1】:

    从您的客户端 javascript 填充的表单元素是否设置为禁用?如果是这样,ASP.NET 将忽略该值。

    例如:

    <asp:TextBox ID="TextBox1" Enabled="False" Runat="Server" />
    
    <script type="text/javascript">
        document.forms[0].elements["TextBox1"].style.disabled = false;
        document.forms[0].elements["TextBox1"].value = "Value set from Javascript";
    </script>
    

    当这段代码运行时,ASP.NET 认为文本框被禁用,因此在回发中丢弃了它的值,因此 TextBox1.Text 的值将始终为空。据我所知,这种行为适用于所有表单元素。如果 ASP.NET 认为它们被禁用,并且它们随后被启用并填充到客户端,则该值在回发时将不可用。

    【讨论】:

    • 不错的收获。我花了一点时间才弄清楚这一点。 :)
    【解决方案2】:

    是的。听起来您还有其他问题(可能是 OnLoad 处理程序未检查 IsPostback 字段并因此覆盖您更改的值?)。

    【讨论】:

      【解决方案3】:

      检查服务器端正在初始化什么,我见过的最常见的问题是任何服务器端初始化代码都不会像这样检查 IsPackBack:

      if (!Page.IsPostBack) {
      
          // Do Work
      
      }
      

      【讨论】:

        【解决方案4】:

        要检查的另一件事是您是在进行回发还是回调。如果您正在执行回调,则与回调一起返回的表单字段值是页面首先发送给客户端的值。出于某种原因,ASP.NET AJAX 挑选这些值并在每次回调时发送它们,而不是重新读取表单字段。

        【讨论】:

          【解决方案5】:

          这是因为我在字段上设置了enabled="false"。我将字段更改为readonly="true",同样的事情发生了。

          解决方案是在运行时使用 JS 将字段更改为只读。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2010-10-28
            • 1970-01-01
            • 2011-03-10
            • 1970-01-01
            • 1970-01-01
            • 2012-10-13
            • 2012-08-17
            • 1970-01-01
            相关资源
            最近更新 更多