我编写了一个ASP.NET应用程序,它在服务器的IIS7中运行。如果我在浏览器中打开此webform并向我显示Sitecode,我会看到...
我有很多控制按钮,标签,文本框和ListView的方式。我尝试在web.config中停用ViewState,但如果我停用此应用程序,则无法正常运行。我能做什么?
答案 0 :(得分:6)
仅停用不需要viewstate的控件。
要做到这一点,你需要了解viewstate是什么。
Viewstate是页面保存的位置,并记住控件的值,以便在回发后使用它们。请记住,在回发后使用视图状态。
所以实际上你有两次相同的数据,但只有viewstate回发以前的数据,后面的代码可以使用那些数据。
所以主要的问题是,您需要记住哪些控件要记住您填写的内容,或者需要记住哪些控件需要记住它们之前的状态。
让我们看看启用和启用EnableViewState的简单文字。
<asp:Literal runat="server" EnableViewState="true" ID="txtLiterar">
现在,如果你在这个文字上放置一个文本,那么文本也会保存在viewstate上,而后面的代码就可以保存。
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
txtLiterar.Text = "Hello There";
}
}
所以在回帖后,Literal仍然有其内容,你可以避免再次填充它,因为viewstate拥有它并自动再次填充它。
<asp:Literal runat="server" EnableViewState="false" ID="txtLiterar">
现在,如果您在此文字上放置文本,则文本不会保存在视图状态中,而是在后面的代码中将其添加为。
protected void Page_Load(object sender, EventArgs e)
{
txtLiterar.Text = "Hello There";
}
所以不同的是,您需要始终使用每个帖子上的数据填充该控件。
视图状态最需要的部分是填充下拉列表时。你有一个数据绑定和代码,需要记住在SelectValue上放置正确的值。
在GridView和其他类似控件上也需要它,因为在分页数据时会保留上一页和其他信息。
因此,您可以关闭大多数控件的视图状态 - 在该控件上,您可以在每个帖子上再次填充它们,以及不需要记住以前状态的控件。
更多内容:
How to optimize class for viewstate
Determine size of ASP.NET page's viewstate before serving page
Limiting view state information on AJAX calls