enableviewstateaspx如何在页面刷新之后保留原来内容?

enableviewstate  时间:2021-01-16  阅读:()

怎么去掉 .net 页面运行后有<input type="hidden" name="__VIEWSTATE" id="__VIEWSTATE" value="乱码"/

在aspx页面加上

<%@ Page EnableViewState="False" %>就可以在此页面禁用视图状态

单控件禁用,以文本框为例

<asp:TextBox ID="TextBox1" runat="server" EnableViewState="false"></asp:TextBox>

HiddenField控件怎么作?????

· HiddenField控件顾名思义就是隐藏输入框的服务器控件,他能让你保存那些不必显示在页面上的且对安全性需求不高的数据。

也许这个时候应该有这么一个疑问,为什么有了ViewState、Session和Cookie等状态保存机制,还需要用起HiddenField呢? 增加HiddenField,其实是为了让整个状态管理机制的应用程度更加全方面。

因为不管是ViewState、Cookie还是Session,都有其失效的时候,比如用户因某种需求设置ViewState为false,或环境条件限制使用Cookie,或用户长时间没有动作导致Session过期等等,那这个时候HiddenField无疑是最佳选择。

HiddenField控件的作用简单的说是用于存储需要在向服务器的发送间保持的值。

他作为<input type= "hidden"/> 元素呈现,并且通过添加runat=”server”就能使他成为标准的HTML服务器控件。

下面列出的是ASP.NET HiddenField Web服务器控件能使用的属性和事件。

<asp:HiddenField EnableTheming="True|False" EnableViewState="True|False" ID="string" OnDataBinding="DataBinding event handler" OnDisposed="Disposed event handler" OnInit="Init event handler" OnLoad="Load event handler" OnPreRender="PreRender event handler" OnUnload="Unload event handler" OnValueChanged="ValueChanged event handler" runat="server" SkinID="string" Value="string" Visible="True|False" /> 复制代码 因为 HiddenField 的值将呈现给客户端浏览器,所以他不适用于存储安全敏感的值。

若要为HiddenField 控件指定值,请使用 Value 属性,请注意是Value而不是Text。

事实上HiddenField并没有Text属性,这和DropDownList、CheckBoxList等标准按钮的属性命名方式一致。

在标准的属性命名方式中,Text的值是呈现给用户看到的,而Value的值则是通长是通过代码进行控制的。

例如你能让DropDownList的Text属性显示用户名而让他的Value存储用户的编号。

下面的代码显示的是改控件的基本使用。

<html> <head> <script language="C#" runat="server"> void Button1_Click(object sender, EventArgs e) { if (HiddenField1.Value == String.Empty) HiddenField1.Value = "0"; HiddenField1.Value = (Convert.ToInt32(HiddenField1.Value)+1).ToString(); Label1.Text = HiddenField1.Value; } </script> </head> <body> <h3><font face="Verdana">HiddenField</font></h3> <form runat=server> <asp:HiddenField id=HiddenField1 runat=Server /> <asp:Button id=Button1 Text="单击按钮" onclick="Button1_Click" runat="server" /> 单击 <asp:Label id=Label1 Text="0" runat=server /> 次 </form> </body> </html> 复制代码 在上面代码中, <asp:HiddenField id=HiddenField1 runat=Server />就定义了一个隐藏控件在按钮的单击事件里计算用户单击的次数,并将改次数赋值给Label1。

你能将上面代码中的 <asp:HiddenField id=HiddenField1 runat=Server />改为<input type=hidden id=HiddenField1 runat=Server >也是能的 在使用上面代码里,如果你从浏览器里查看原始码会得到如下的信息: <form name="Form1" method="post"action="Default.aspx" id="Form1"> 这是因为HiddenField是通过HTTP协议进行传递数据的,所以如果你通过"method="get"或链接打开新的窗体页,那么HiddenField并不可用。

另外,HiddenField并不是取代Session来维护状态的,在上面例子里,虽然你点击一次按钮能显示你点击的次数不过并不是说他能记录你的状态信息。

如果你重新打开浏览器那么你看到的此处仍然是0而不是3。

HiddenField事件 HiddenField较为常用的是ValueChanged事件,该事件在Value值发生改动时触发该事件。

然而在实际使用时,要知道页面记载顺序。

在页面回传过程中,具体的页面周期你能到如下网站查看 //library/ms178472.aspx 下面的例子说明了这个问题 <head> <script runat="server" language="c#"> protected void Page_Load(object sender, EventArgs e) { Response.Write("<p>页面的Page_Load事件触发,触发时间是:" + DateTime.Now.ToString()); if (HiddenField1.Value == String.Empty) HiddenField1.Value = "0"; } protected void Button1_Click(object sender, EventArgs e) { Response.Write("<p>Button1_Click为改动Hidden的值前事件触发,触发时间是:" + DateTime.Now.ToString()); HiddenField1.Value = (Convert.ToInt32(HiddenField1.Value) + 1).ToString(); Label1.Text = HiddenField1.Value; } protected void HiddenField1_ValueChanged(object sender, EventArgs e) { Response.Write("<p>HiddenField的 ValueChanged事件触发,触发时间是:" + DateTime.Now.ToString()); } </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:Button ID="Button1" runat="server" OnClick="Button1_Click" Text="Button" /> </form></body> </html> 复制代码 在这个例子里,我们想要的结果是:当用户单击按钮时,通过按钮的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属性,将 <inputtype="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的控件让用户 格式化文本,并在输入完毕后,返回原注册页面。

关于这种情况,以后会介绍

如何取出viewstate中的值,并且还原

ViewState是为了那些在页面回发的时候不能保存状态的控件设计的,而文本框在回发的时候他的值会作为表单内容的一部分传递,返回的时候如果在后台没有修改过textbox的值,它又会被原样返回,所以无论你设不设textbox的EnableViewState属性,他的

谁可以简要说明一下EnableViewState设置为false后的作用?

若设为false,则每次页面刷新,控件中的数据将重新从数据库中检索,有好处也有坏处:好处是在数据没有改变的情况下,不检索数据意味着不用访问数据库,从而提高处理速度,坏处我认为,在某些数据已经改变了的情况下,比如说已经更新了数据库,那么若还是到内存中读取数据的话显然读出来的数据不对了。

EnableViewState是HTML属性还是ASP.NET的标签的属性?

2楼说的挺明白了,我再补充补充。

你要想知道enableviewstate是什么属性,就要先知道viewstate是干什么的。

enableviewstate,就是是否允许控件带viewstate. viewstate,翻译为视图状态。

是控件为了保持状态而实现的一种机制。

http协议是没有状态的,举例来说,比如一个input控件(asp:textbox 在运行之后,呈现在客户端的,就是一个
代码类似 不过,却不用你重新填,你点按钮之后,页面刷新之后,里面的内容仍然保存着,他是怎么保存的呢,这就是viewstate的功劳。

你的页面提交之后,iis会根据viewstate的内容,把你的值重新给你输出到相应的控件里。

在页面上点右键,你会找到一个名字叫__viewstate的hidden,这个隐藏字段,就是viewstate,它的值是经过了base64编码的字符串,这个值,就是记录着你这些控件的状态、值等等,比如你的textbox的值是什么,gridview的每行,每个字段的值、属性等等。

现在你应该明白了,enableviewstate是html的属性,还是的。

aspx如何在页面刷新之后保留原来内容?

如果文本框是服务器控件, 试在if (!ispostback)里写TextBox1.EnableViewState = True;

RAKsmart推出7.59美元/月,云服务器产品Cloud Server,KVM架构1核1G内存40G硬盘1M带宽基础配置

近期RAKsmart上线云服务器Cloud Server产品,KVM架构1核1G内存40G硬盘1M带宽基础配置7.59美元/月!RAKsmart云服务器Cloud Server位于美国硅谷机房,下单可选DIY各项配置,VPC网络/经典网络,大陆优化/精品网线路,1-1000Mbps带宽,支持Linux或者Windows操作系统,提供Snap和Backup。RAKsmart机房是一家成立于2012年...

新注册NameCheap账户几天后无法登录原因及解决办法

中午的时候有网友联系提到自己前几天看到Namecheap商家开学季促销活动期间有域名促销活动的,于是就信注册NC账户注册域名的。但是今天登录居然无法登录,这个问题比较困恼是不是商家跑路等问题。Namecheap商家跑路的可能性不大,前几天我还在他们家转移域名的。这里简单的记录我帮助他解决如何重新登录Namecheap商家的问题。1、检查邮件让他检查邮件是不是有官方的邮件提示。比如我们新注册账户是需...

弘速云香港VPSVPS线路有CN2+BGP、CN2 GIA,KVM虚拟化架构,裸金属月付564元

弘速云怎么样?弘速云是创建于2021年的品牌,运营该品牌的公司HOSU LIMITED(中文名称弘速科技有限公司)公司成立于2021年国内公司注册于2019年。HOSU LIMITED主要从事出售香港vps、美国VPS、香港独立服务器、香港站群服务器等,目前在售VPS线路有CN2+BGP、CN2 GIA,该公司旗下产品均采用KVM虚拟化架构。可联系商家代安装iso系统。点击进入:弘速云官方网站地址...

enableviewstate为你推荐
个性qq资料QQ个性资料二叉树遍历二叉树三种遍历方式原则?1433端口怎么开启本机1433端口百度手写百度手写怎么不见了arm开发板arm开发板是干什么用的,是用在什么领域方面的网易公开课怎么下载手机上的网易公开课的付费课程怎么下载??????宕机宕机是什么意思?ios系统iOS系统为什么那么好blogcn哪种博客更好...sina.baidu.blogcn还是.............?Qzongqzong皮肤上怎样写字
主机 博客主机 omnis 便宜建站 圣诞节促销 发包服务器 最好的空间 卡巴斯基官方免费版 789电视 老左正传 免费phpmysql空间 怎么建立邮箱 卡巴斯基免费试用版 512mb 独享主机 注册阿里云邮箱 免备案cdn加速 mteam 腾讯云平台 reboot 更多