首页技术enableviewstate?ASP.net enableViewState的问题

enableviewstate?ASP.net enableViewState的问题

编程之家2023-11-01130次浏览

这篇文章给大家聊聊关于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"

enableviewstate?ASP.net enableViewState的问题

每个页面(在指令中):在页面的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?ASP.net enableViewState的问题

打开: 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到此分享完毕,希望能帮助到您。

企业建站模板?建网站的模板,哪家好用phpcom(php-&gt;是什么意思)