如何在没有控制问题的情况下停用 ViewState

Posted

技术标签:

【中文标题】如何在没有控制问题的情况下停用 ViewState【英文标题】:How I can deactivate ViewState without Control problems 【发布时间】:2012-08-18 15:27:00 【问题描述】:

我编写了一个 ASP.NET 应用程序,它在服务器的 IIS7 中运行。如果我在浏览器中打开此网络表单并向我显示站点代码,我会看到...

我有很多控件,包括按钮、标签、文本框和 ListView。我尝试在 web.config 中停用 ViewState,但如果我停用它,我的应用程序将无法正常运行。我能做些什么?

【问题讨论】:

究竟什么不起作用? 为什么要禁用视图状态? 如果你觉得 ViewState 很丑,你可以使用 ASP.NET MVC。 我使用 jQuery 对话框,如果我选择 ListView 的一个对象,则站点加载新的,而不是后台的控件被停用 是否有链接到该 listView 的自动回发事件?禁用这将避免网站重新加载 【参考方案1】:

仅停用不需要视图状态的控件。

为此,您需要了解视图状态是什么。

Viewstate 是页面保存并记住控件值的地方,以便在回发后拥有它们。请记住,在回发后使用视图状态。

所以实际上你有两次相同的数据,但只有视图状态是回发以前的数据,后面的代码可以使用该数据。

所以主要问题是,您需要哪些控件来记住您填写的内容,或者需要哪些控件来记住它们之前的状态。

让我们看一个启用和禁用 EnableViewState 的简单 Literal。

ViewState 开启

<asp:Literal runat="server" EnableViewState="true" ID="txtLiterar">

现在,如果您在此文字上放置文本,则该文本也会保存在视图状态中,并且您可以在后面的代码中执行此操作。

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 viewstateDetermine size of ASP.NET page's viewstate before serving pageLimiting view state information on AJAX calls

【讨论】:

以上是关于如何在没有控制问题的情况下停用 ViewState的主要内容,如果未能解决你的问题,请参考以下文章

asp.net c# MVC:没有 ViewState 我该如何生活?

如何暂时停用 tvOS UITabBarController

FLTK:如何在停用的 Fl_Text_Editor 中启用滚动条

如何在 Magnolia 5.7 中停用资产版本控制

为啥 mysql 数据库在 xampp 状态下被停用但在 xampp 控制面板应用程序上呈绿色?

如何在新的 Google Play 控制台中停用所有旧版本的 APK?