惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

L
LangChain Blog
博客园 - 司徒正美
美团技术团队
Martin Fowler
Martin Fowler
雷峰网
雷峰网
aimingoo的专栏
aimingoo的专栏
博客园 - 三生石上(FineUI控件)
Vercel News
Vercel News
酷 壳 – CoolShell
酷 壳 – CoolShell
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
爱范儿
爱范儿
U
Unit 42
Y
Y Combinator Blog
月光博客
月光博客
Hugging Face - Blog
Hugging Face - Blog
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
有赞技术团队
有赞技术团队
GbyAI
GbyAI
H
Help Net Security
量子位
Last Week in AI
Last Week in AI
博客园_首页
腾讯CDC
小众软件
小众软件

博客园 - 斧头帮少帮主

猜一猜,会输出什么? ASP.NET错误处理的两种方案_AX Log4Net最简单的使用配置_AX 一个修改后的JS日历(Calendar)控件_AX - 斧头帮少帮主 - 博客园 页面回传(PostBack)后恢复滚动条的位置_AX - 斧头帮少帮主 - 博客园 Delegate(代理)异常:该委托必须有一个目标 WCF学习随笔6--Version变更--我们在前进_AX WCF学习随笔5--我知道:Known--可憐的孩子_AX WCF学习随笔4--契约|序列化详解--祭斧_AX WCF学习随笔3--第一个Sample--祭斧_AX - 斧头帮少帮主 - 博客园 WCF学习随笔2--Contract--磨斧_AX WCF学习随笔1--扫盲--磨斧_AX 把项目运行情况写入系统日志(Log)的三种方法【续】_AX 把项目运行情况写入系统日志(Log)的三种方法_AX 为用户控件User Control添加事件_AX XML常用操作总结_AX DataTable常用操作总结_AX - 斧头帮少帮主 - 博客园 .NET(C#)代码性能优化_AX - 斧头帮少帮主 - 博客园 Panel的不足及弥补_AX - 斧头帮少帮主 - 博客园
Hidden Field 的值不能回传(PostBack)到后台_AX
斧头帮少帮主 · 2008-07-16 · via 博客园 - 斧头帮少帮主

是的,你没有看错,确实是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);
    }
}