ASP.NET2.0 HiddenField控件(2)

2008-02-22 09:32:56来源:互联网 阅读 ()

新老客户大回馈,云服务器低至5折


在这个例子里,我们想要的结果是:当用户单击按钮时,通过按钮的Button1_Click事件更改HiddenField1的Value,然后再触发HiddenField1的HiddenField1_ValueChanged事件,然而事实真的如此吗?
运行上面的代码,得到的结果正如你看到的,每次单击时,Button确实改变了HiddenField的值,但是我们在HiddenField1_ValueChanged里定义的输出并没有执行,换句话说页面并没有执行ValueChanged事件
要理解这个问题还需要了解页面的声明周期,在页面周期过程中,你可以看到在Page_Init里是读取或初始化控件属性,然后再是Control events。
这里的事件意思是说: 在Page_Init事件里,Web页面会接受用户回传的数据,例如将 <span id="Label1">Label</span>赋值给ID为Label1的Text属性,将 <input type="hidden" name="HiddenField1" id="HiddenField1" value="0" />的value值赋值给HiddenField1的Value属性。等所有初始化完毕了,页面才开始执行控件的事件--Button1_Click,在Button事件里将HiddenField的Value值改变。那么这里既然已经将Value值改变为什么没有执行ValueChanged事件呢?

此时,虽然这里已经将Value值改变,但是在Page_Init里保存的这是因为当前单击Button按钮时,虽然改变了HiddenField但同样又一次触发了页面的回复,也就是虽然在上一此HiddenValue的值为0,而此次将其值改为1,但是在页面回传后,由于ViewState会保存上次的装(这里是1),所以在Page_Init里,认为HiddenField的初始值为1,而本次还是1,使得它感觉数据没有变化,所以仍然不会触发ValueChanged事件

当然,你可以禁用HiddenField来进行处理,就可以执行ValueChanged事件,但是事实上你禁用ViewState后,页面不再保存ViewState的值使得页面认为每一次请求HiddenField的都是新的,例如如下代码:
你并没有改变Hiddenfield的值,但是仍然每次都执行。

<%@ Page EnableViewState="false" %>
<head>
<script runat="server" language="c#">

protected void Page_Load(object sender, EventArgs e)

{

if (HiddenField1.Value == String.Empty)

HiddenField1.Value = "111";

}

protected void Button1_Click(object sender, EventArgs e)

{ // HiddenField1.Value = (Convert.ToInt32(HiddenField1.Value) 1).ToString();
Label1.Text = TextBox1.Text; }

protected void HiddenField1_ValueChanged(object sender, EventArgs e)

{ Response.Write("Changed." DateTime.Now.ToString());
Response.Write(HiddenField1.Value);
Response.Write(TextBox1.Text); }

</script>
</head>
<body>

<form id="form1" runat="server"> <div>

<asp:HiddenField ID="HiddenField1" runat="server" OnValueChanged="HiddenField1_ValueChanged" />

</div>

<asp:Label ID="Label1" runat="server" Text="Label"></asp:Label>

<br />
<asp:TextBox runat=server ID=TextBox1></asp:TextBox>

<asp:Button ID="Button1" runat="server" OnClick="Button1_Click" Text="Button" />

</form>

</body>

</html>


利用HiddenFile 并结合ASP.NET2.0提供的“交叉Cross Page”页面可以实现页面数据的传递,该情况针对这样的一种方案:
在一个注册页面里,需要用户输入数据,由于备注一栏的数据可能很多,可以在新窗口可以利用类似FreeTextBox的控件让用户
格式化文本,并在输入完毕后,返回原注册页面。关于这种情况,以后会介绍

标签:

版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有

上一篇:在ASP.NET程序中实现语音合成

下一篇:在.NET中使用脚本引擎