2009-04-20 39 views
0

我有一些客户端JavaScript设置表单域。当页面回发时,这些字段被重置。客户端JS和ASP.NET回发

这是为什么?发生回发时,是否将字段值捕获并放入ViewState中?

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

回答

4

从您的客户端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认为它们被禁用,并且它们被频繁启用并填充到客户端,则该值在回发中将不可用。

+0

好的。花了一点时间来弄清楚这一点。 :) – core 2009-04-21 00:11:13

1

是的。这听起来像你有其他事情出错了(也许是一个OnLoad处理程序不检查IsPostback字段,因此覆盖您更改的值?)。

1

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

if (!Page.IsPostBack) { 

    // Do Work 

} 
0

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

0

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

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