我有一些设置表单字段的客户端JavaScript。当页面回发时,这些字段将被重置。
这是为什么?当回发发生时,是否捕获字段值并将其放入ViewState中?
编辑:当我在Page_Load()上断开调试器时,在回发后执行任何代码之前,表单字段值为空。
答案 0 :(得分: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认为它们已被禁用,并且它们随后被启用并填充在客户端,则该值将不会在回发中提供。
答案 1 :(得分:1)
是。听起来你有其他错误(可能是OnLoad处理程序没有检查IsPostback字段,因此会覆盖你改变的值?)。
答案 2 :(得分:1)
检查服务器端正在初始化的内容,我看到的最常见的问题是任何服务器端初始化代码都没有像这样检查IsPackBack:
if (!Page.IsPostBack) {
// Do Work
}
答案 3 :(得分:0)
要检查的另一件事是你是在做回发还是回调。如果您正在进行回调,则使用回调发回的表单字段值是页面首次发送到客户端的值。出于某种原因,ASP.NET AJAX会对这些值进行pickle并将其与每次回调一起发送,而不是重新读取表单字段。
答案 4 :(得分:0)
这是因为我在字段上设置了enabled="false"
。我将字段更改为readonly="true"
,同样的事情发生了。
解决方案是使用JS在运行时将字段更改为只读。