Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/36.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vb.net/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net 无法删除viewstate隐藏字段_Asp.net_Vb.net_Webforms_Asp.net 3.5_Viewstate - Fatal编程技术网

Asp.net 无法删除viewstate隐藏字段

Asp.net 无法删除viewstate隐藏字段,asp.net,vb.net,webforms,asp.net-3.5,viewstate,Asp.net,Vb.net,Webforms,Asp.net 3.5,Viewstate,我有一个巨大的viewstate隐藏字段,导致我的应用程序无法运行。我试过: 在每个控件上启用ViewState=“false” 页面指令中的EnableViewState=“false” Page.EnableViewState=false web.config中的 导致问题的页面有一个GridView,我只想呈现一次,所以我永远不需要viewstate 我使用检查了隐藏字段,其中显然几乎没有任何信息(因为我可能在每个控件中禁用了属性)。但出于某种原因,该页面坚持包含一个数千行长的隐藏字段

我有一个巨大的viewstate隐藏字段,导致我的应用程序无法运行。我试过:

  • 在每个控件上启用ViewState=“false”
  • 页面指令中的
    EnableViewState=“false”
  • Page.EnableViewState=false
  • web.config中的
导致问题的页面有一个GridView,我只想呈现一次,所以我永远不需要viewstate

我使用检查了隐藏字段,其中显然几乎没有任何信息(因为我可能在每个控件中禁用了属性)。但出于某种原因,该页面坚持包含一个数千行长的隐藏字段

我怎样才能永久地去掉这个字段(或者将其缩小到可用的大小)


下面是一个令人不快的GridView:

<asp:GridView ID="MyGrid" runat="server" AutoGenerateColumns="False" 
      EnableModelValidation="True" EnableViewState="False" 
      CssClass="my-report">
      <Columns>
          <asp:TemplateField>
              <HeaderTemplate>
                <span title='title' class="abbr">My ID</span>
              </HeaderTemplate>
              <ItemTemplate>
                <%# Eval("my_id") %>
              </ItemTemplate>
          </asp:TemplateField>
          <asp:TemplateField>
              <HeaderTemplate>
                <span title='title2' class="abbr">Second col heading</span>
              </HeaderTemplate>
              <ItemTemplate>
                  <asp:ListView ID="MyListView" runat="server" EnableViewState="False">
                     <LayoutTemplate>
                        <ul>
                            <asp:PlaceHolder runat="server" ID="itemPlaceHolder" EnableViewState="False" />
                        </ul>
                     </LayoutTemplate>
                     <ItemTemplate>
                            <li><%# Eval("field_2")%></li>
                     </ItemTemplate>
                   </asp:ListView>
              </ItemTemplate>
          </asp:TemplateField>
      </Columns>
  </asp:GridView>

我的身份证
第二列标题

  • 您在页面上看到的隐藏字段不仅用于ViewState,还包含ControlState。没有办法禁用控件状态,因此您需要找到一种方法来适应它。网格显示了多少项

    作为最后一个选项,您可以考虑压缩生成的VIEWSTATE字段.< /P>


    您有一篇MSDN文章解释了ControlState的工作原理

    如果您的
    GridView
    是非交互式的(即,它不包含任何回发的子控件),那么您可以通过等待调用页面的
    Render
    方法来绑定网格,从而减小视图状态的大小:

    Protected Overrides Sub Render(writer As HtmlTextWriter)
        MyGrid.DataSource = ...
        MyGrid.DataBind()
        MyBase.Render(writer)
    End Sub
    

    如果有人有类似的问题,那是因为我在网格的每一行中都有一个ListView。我用中继器替换了ListView,viewstate不再是问题。

    另一个选项是使用Flesk.viewstate

    它可以将viewstate放在文件上、压缩它、会话等

    正如其他人所说,在ASPNET中,有时不可避免地要使用ViewState


    这就是为什么您最好的选择是移动到MVC:)

    您是否尝试过在页面的呈现事件中将其剥离出来@我还没有诉诸于此,这似乎是一个巨大的混乱。这篇文章的作者说“这样做的开销几乎肯定会比任何可能的好处都要大”,我不得不同意:(:)是的,你的选择非常有限,这是ASP.NET的本质。这就是为什么我成了MVC的忠实粉丝,它是一个功能强大的框架,提供了轻量级的渲染,没有臃肿的标记,只有你需要的。网格显示了很多项目,问题越严重。这似乎是因为我在每行的最后一个单元格中使用了ListView。