【问题标题】:ASP.NET - ViewState: empty placeholder generates view stateASP.NET - ViewState:空占位符生成视图状态
【发布时间】:2011-01-01 18:47:26
【问题描述】:

在我的网页上,我有 PlaceHolder,没有加载控件。

<asp:PlaceHolder ID="PlaceHolderStatMain" runat="server">
</asp:PlaceHolder>

我正在查看为页面生成的 ViewState,如下所示:

<input type="hidden" name="__VIEWSTATE" id="__VIEWSTATE" value="/wEPDwUJLTg1NDkyNTUzD2QWAgIDD2QWAgIND2QWAmYPZBYCAgEPZBYCZg9kFgJmD2QWBmYPFQEYL3N0YXRfc3RhZGl1bS9sZWFndWVfV0VGZAIBDxUBGC9zdGF0X3N0YWRpdW0vbGVhZ3VlX0VFRmQCAg8VARgvc3RhdF9zdGFkaXVtL2xlYWd1ZV9GQ1VkZEuSBUr5LFL6WfCehNBJgjrq0GzwWCWN2qlU70V7LAAb" />

当我将 EnableViewState 设置为 false 时:

<asp:PlaceHolder ID="PlaceHolderStatMain" runat="server" EnableViewState="false">
</asp:PlaceHolder>

viewstate 内容明显减少:

<input type="hidden" name="__VIEWSTATE" id="__VIEWSTATE" value="/wEPDwUJLTg1NDkyNTUzZGTTn8Y28VwmpE/K7yPPkLFvhrqMdU8THijFW/BMFzk0tQ==" />

问题:如何在不禁用占位符本身的视图状态的情况下删除“无用”视图状态内容(我希望加载到占位符中的其他控件具有视图状态)?

有可能吗?

欢迎提出任何想法!

附:我正在使用 ASP.NET 4.0

【问题讨论】:

    标签: asp.net viewstate asp.net-4.0


    【解决方案1】:

    在 ASP.Net 4.0 中,您可以使用 ViewStateMode 参数禁用页面的视图状态,并为需要它的控件启用它。 Label1 将具有 viewstate 而 Label2 不会,因为它从页面继承了 Disabled 状态。

    <%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs"
        ViewStateMode="Disabled" Inherits="_Default" %>
    
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head id="Head1" runat="server">
        <title>View State Demo in ASP.NET 4.0</title>
    </head>
    <body>
       <form id="form1" runat="server">
         <div>
            <asp:Label ID="Label1" runat="server" Text="One" ViewStateMode="Enabled"></asp:Label><br />
            <asp:Label ID="Label2" runat="server" Text="Two"></asp:Label> <br /><br />      
            <asp:Button ID="Button1" runat="server" Text="PostBack" />
          </div>
        </form>
      </body>
    </html>
    

    【讨论】:

    • 因此您的建议是禁用占位符的 ViewState,但如果某些控件需要它 - 我需要为特定控件显式启用它。我说的对吗?
    • 是的,您的另一个选项是我们以前的选项,为所有不需要它的人禁用它。另一种方法是创建一个 MVC 应用程序,它是无状态的并且不使用 ViewState。但是使用 MVC 是创建应用程序的另一种风格。如果您担心的话,您还可以使用技巧将视图状态存储在服务器上或压缩它以节省空间。
    • MVC 不是一个选项...我有一个网站,在 MVC 上重写是不可行的。并且 PlaceHolder 内部没有控制,所以除了占位符本身之外没有什么可以禁用的。幸运的是,应用程序在 asp.net 4.0 下重新编译,所以我可以继续这个建议。但也欢迎其他(如果有的话)!
    • @Budda:为所有控件打开视图状态有什么问题?你想达到什么目的?您可能想查看mikemason.ca/blog/2008/11/compressing-viewstatehanselman.com/blog/…
    • 我将回答另一个问题:导致性能/流量问题的无用信息有什么好处?另一个答案:微软建议在不需要时禁用 ViewState
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-05-03
    • 2014-01-03
    • 2013-03-03
    • 1970-01-01
    • 2012-04-19
    • 2022-01-24
    • 2017-05-20
    相关资源
    最近更新 更多