2012-03-27 7 views
0

Ich habe eine riesige ViewState verstecktes Feld, das meine Anwendung nicht funktionsfähig verursacht. Ich habe versucht:Kann Viewstate verstecktes Feld nicht entfernen

  • EnableViewState="false" bei jeder Kontrolle
  • EnableViewState="false" in Seitendirektive
  • Page.EnableViewState = false in Page_Init
  • <pages enableViewState="false" /> in web.config

Die Seite das Problem verursacht hat einen einzigen Gridview, die ich will rendern nur einmal, also brauche ich nie den Viewstate.

Ich untersuchte das versteckte Feld mit this tool, und es gibt anscheinend kaum Informationen darin (da ich die Eigenschaft in jedem Steuerelement wahrscheinlich deaktiviert). Aus irgendeinem Grund besteht die Seite jedoch darauf, ein verstecktes Feld aufzunehmen, das Tausende und Abertausende von Zeilen lang ist.

Wie kann ich dieses Feld für immer loswerden (oder auf eine brauchbare Größe reduzieren)?


Hier ist ein exert aus dem Gridview säumigen:

<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> 
+0

Haben Sie versucht es aus in der Render-Ereignis Seite Strippen? http://StackOverflow.com/Questions/2432972/Completely-Remove-viewstate-for-specific-pages – KodeKreachor

+0

@KodeKreachor Ich habe nicht darauf zurückgegriffen (noch), es scheint wie ein massiver Kludge. Der Autor von diesem sagt _ "Overhead davon zu tun würde fast sicher größer sein als jeder mögliche Nutzen obwohl _ _ dem ich zustimmen würde :( – Flash

+0

:) Ja, Ihre Möglichkeiten sind ziemlich begrenzt, das ist die Natur von ASP.NET .Aus diesem Grund bin ich ein großer Fan von MVC geworden. Es ist ein leistungsfähiges Framework, das einen leichtgewichtigen Renderer, kein aufgeblähtes Markup, nur das liefert, was Sie brauchen. – KodeKreachor

Antwort

0

Falls jemand ein ähnliches Problem, es wurde vorkommendes, weil ich in jeder Zeile des Gitters ein Listview hatte. Ich habe den ListView durch einen Repeater ersetzt und der Viewstatus ist kein Problem mehr.

1

Das versteckte Feld, das Sie auf der Seite zu sehen, nicht nur für Viewstate ist, ist es auch das Control enthält. Es gibt keine Möglichkeit, den Steuerungsstatus zu deaktivieren, also müssen Sie einen Weg finden, damit zu leben. Wie viele Elemente zeigt das Raster an?

Als letzte Option können Sie das generierte Viewstate-Feld komprimieren.

Here Sie haben einen MSDN-Artikel erklären, wie Control

+0

Das Raster zeigt viele Elemente an, und das Problem wird umso schlimmer, je mehr vorhanden ist. Es scheint wegen der ListView, die ich in der letzten Zelle jeder Zeile habe, zu kommen. – Flash

1

funktioniert Wenn Ihr GridView ist nicht interaktiv (dh, es nicht alle untergeordneten Steuerelemente enthalten, die wieder schreiben), dann können Sie die Größe der Ansicht reduzieren Zustand durch, bis die Seite Render Methoden warten aufgerufen, um das Raster zu binden:

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

Eine weitere Option ist die Verwendung von Flesk.ViewState etwas.

Es kann den Ansichtszustand auf Dateien setzen, komprimiert, Sitzung, usw.

Wie die andere sagen, manchmal unvermeidlich in ASPNET ist mit Viewstate zu leben.

Das ist, warum die beste Wahl zu MVC zu bewegen ist :)