enableviewstate?ASP.net enableViewState的问题
这篇文章给大家聊聊关于enableviewstate,以及ASP.net enableViewState的问题对应的知识点,希望对各位有所帮助,不要忘了收藏本站哦。
asp.net服务器控件的视图状态viewstate
首先要明白的是,当你按了类似Button按钮,将页面重新发给服务器后,服务器处理你的页面的过程是:它会重新初始化你第一次请求的那个页面,就是说尽管你第一次请求页面后对这个页面做了许多其他的操作,比如说该页面有让用户随意转换文章字体的功能,你按了个标签使文章字体改变了,之后又有操作按了Button按钮将页面回发给服务器,让它处理你的Button事件,此时服务器重新初始化你的那个页面,该页面只是你第一次请求时的状态(即未改变文章字体的状态),但是为何服务器处理了你的Button事件,将网页回发给你后,文章的字体的确还是你之前自定义的字体呢?不是初始化页面的时候只是回到你第一次请求的状态吗?这就是viewstate的功能。在服务器初始化页面后,它会读取隐藏在你回发的页面中的viewstate,从中读取相应信息,在服务器端将文章字体变为你当初自定义的字体。你的例子中,当在TextBox中输入文字后,传给服务器,服务器当然还能获得你的输入,唯一不同的是,如果你禁用了视图状态,那么当页面再次发给你的时候,你的TextBox就是空的了。而若没有禁用,当页面再次回发给你的时候,TextBox中仍然保留你上次的输入值。
如何关闭viewstate
禁用 ViewState
可以针对单个控件、整个页面或整个应用程序禁用 ViewState,如下所示:
每个控件(在标记上):控件属性里面设置viewstate的值为false.
<asp:datagrid EnableViewState="false"?/>
在设计页面,手动点击一下Repeater区域,然后在属性列表框中设置EnableViewState="false"
每个页面(在指令中):在页面的page指令中设置页面的enableViewState属性为false
<%@ Page EnableViewState="False"?%>
每个应用程序:(在 web.config中)<Pages EnableViewState="false"?/>
关闭: enableviewstate="false"
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" enableviewstate="false"%>
打开: enableviewstate="true"
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" enableviewstate="true"%>
ASP.net enableViewState的问题
你知道viewstate是干什么用的吗?viewstate,字面上讲就是视图状态,也就是你的页面上的那些控件的状态,例如值是什么,是选中还是没选中,就是由这些viewstate来保存的。由于http是没有状态的协议,而.net要实现一中模拟的持续状态,就采用了这种方式,所以你把viewstate给禁用了,自然你的网站就没办法登陆了。
当然,某些页面,例如信息的展示页面,比如我们做个新闻,新闻只是用来展示,没有什么交互,这样你就可以把视图状态给禁用了,但是不是在web.config里,而是在页面或者控件上有选项。
viewstate是很有用的,也是asp.net的主要特征之一,还是保留着吧。
Winform 有没有ViewState这个属性
EnableViewState属性
指示是否在页请求之间保持视图状态。如果要保持视图状态,则为 true;否则为 false。默认值为 true。
以上为官方对 EnableViewState的解释,有些难懂,我们以示例的方式解释,我们创建一个 Web Form,并添加一个 ListBox、一个 Button、一个方法。
程序代码
<%@ Page Language="C#"%>
<!DOCTYPE html PUBLIC"-//W3C//DTD XHTML 1.0 Transitional//EN""http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<script runat="server">
void AddItem(object sender, EventArgs e)
{
list.Items.Add(DateTime.Now.Ticks.ToString());
}
</script>
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title>EnableViewState属性</title>
</head>
<body>
<form id="form1" runat="server">
<div>
<asp:ListBox ID="list" runat="server">
<asp:ListItem Text="EnableViewState属性" Value="1"></asp:ListItem>
</asp:ListBox>
<asp:Button ID="btn" runat="server" Text="追加一个 Item" OnClick="AddItem"/>
</div>
</form>
</body>
</html>
在浏览器中访问该网页,得到 HTML源文件中如下内容:
<input type="hidden" name="__VIEWSTATE" id="__VIEWSTATE" value="/wEPDwUKMTIyNTcyODQzNWRkKV9J6dx90HkLpaqCRtS3s4xsNnc="/>
这个 hidden框存储的是各个控件的属性值与状态,比如 ListBox的 Text、Value、Selected等,这也是为什么在 ASP.NET里,可以在服务器端获得列表的 Text值的原因。
开始实验
现在点击按钮,服务器端将执行 AddItem方法,ListBox中的内容也随之增多,查看 HTML源文件中的“__VIEWSTATE”也随之增多。关于 DateTime请参见 ASP.NET时间操作。
再次实验
现在我们修改 ListBox的 EnableViewState属性为 false。
<asp:ListBox ID="list" runat="server" EnableViewState="false">
再次点击几下按钮,我们可以发现,之前点击按钮添加的 Item都不见了,现在每次点击按钮,ListBox中都只有两个 Item,一个为静态指定的,一个是通过 AddItem方法添加的。这是由于 ListBox的内容没有通过“__VIEWSTATE”传送到服务器端,服务器端不知道 ListBox之前还动态添加的有内容。
注意观察,添加的数字并不相同,这说明每次点击都执行了 AddItem方法,而不是有些文章所说的,使用 EnableViewState="false"时方法只执行一次,方法是每次都执行,只是由于没有获得之前动态添加(编辑、删除)后的内容,所以只有最新添加(编辑、删除)的内容。
EnableViewState指定是否向服务器端传送某(些)控件的属性值、状态。
EnableViewState的默认值为 true,设置为 false可以降低数据传送量,当然应该在程序逻辑允许设置为 false的情况下。
EnableViewState可用于控件,也可用于@ Page、@ Control、@ Master指令语法。当控件的 EnableViewState的设置与指令语法的设置不一致时,取 false值。
关于enableviewstate到此分享完毕,希望能帮助到您。