Hidden Field 的值不能回传(PostBack)到后台_AX

是的,你没有看错,确实是Hidden Field的值没有PostBack到后台,我在百度和google上也没有搜索到相关内容.

查找n遍无果,还以为是因为项目类型(类库类型)的关系.直到有天偶然想到可能是脚本事件onbeforeunload的问题.经测试,确实原因出在这.

【总结】
NameValueCollection在onbeforeunload事件执行前就已保存好,所以在onbeforeunload事件中再更改input的值已不会起作用,反映到NameValueCollection中.  
但是:如果使用到return onbeforeunload事件,则改变的值又会反映到NameValueCollection中,PostBack到后台.

【测试代码】
前台代码:

<% @ Page Language="C#" AutoEventWireup="true"  CodeFile="Default.aspx.cs" Inherits="_Default"  %>

<! DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd" >

< html  xmlns ="http://www.w3.org/1999/xhtml" >
< head  runat ="server" >
    
< title > 无标题页 </ title >
    
< script  language ="javascript"  type ="text/javascript" >
    
function ChangeHiddenValue()
    
{
        document.getElementById(
"hidAX").value="已赋值!";
        alert(document.getElementById(
"hidAX").value);
        
//加return,离开页面时会显示对话框,并且显示return的内容
        //return "Hello";
    }

    
</ script >
</ head >
< body  onbeforeunload ="ChangeHiddenValue();" >
<% --<body onbeforeunload="return ChangeHiddenValue();">-- %>
    
< form  id ="form1"  runat ="server" >
    
< div >
        
< asp:HiddenField  ID ="hidAX"  runat ="server"  Value ="默认值"   />
        
< asp:Button  ID ="btnAX"  runat ="server"  Text ="点我进行PostBack"   />
        
<% --<asp:Button ID="btnTest" runat="server" OnClientClick="ChangeHiddenValue();" Text="点我进行PostBack" />-- %>
    
</ div >
    
    
</ form >
</ body >
</ html >

后台代码:
public   partial   class  _Default : System.Web.UI.Page 
{
    
protected   void  Page_Load( object  sender, EventArgs e)
    {
        Response.Write(hidAX.Value);
    }
}

你可能感兴趣的:(Hidden Field 的值不能回传(PostBack)到后台_AX)