2011-01-01 7 views
1

Auf meiner Web-Seite habe ich PlaceHolder, keine Steuerelemente sind darin geladen.ASP.NET - ViewState: leerer Platzhalter generiert Ansichtszustand

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

ich die Viewstate bin für die Seite generiert, ist es folgende:

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

Wenn ich EnableViewState auf false gesetzt:

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

Der Ansichtszustand Gehalt signifikant verringert wurde:

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

Frage: Wie kann man 'nutzlosen' Viewstate-Inhalt entfernen, ohne viewstate für den Platzhalter selbst zu deaktivieren (ich möchte, dass ein anderes Steuerelement, das in den Platzhalter geladen wurde, viewstate hat)?

Ist das überhaupt möglich?

Jeder Gedanke ist willkommen!

P.S. Ich verwende ASP.NET 4.0

Antwort

1

In ASP.Net 4.0 können Sie den Viewstate für die Seite mit dem Parameter ViewStateMode deaktivieren und für die Steuerelemente aktivieren, die es benötigen. Label1 wird viewstate und Label2 nicht, da es den deaktivierten Status von der Seite erbt.

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

Also Vorschlag ist, ViewState für Platzhalter zu deaktivieren, aber wenn einige Steuerelemente es brauchen - muss ich es explizit für bestimmte Steuerelemente aktivieren. Habe ich recht? – Budda

+0

Ja, Ihre andere Option ist, was wir vorher hatten, deaktivieren Sie sie für alle, die sie nicht brauchen. Eine andere Möglichkeit besteht darin, eine MVC-App zu erstellen, die staatenlos ist und ViewState nicht verwendet. Aber MVC ist eine andere Art der Erstellung von Anwendungen. Sie können auch Tricks verwenden, um den Ansichtszustand auf dem Server zu speichern oder ihn zu komprimieren, um Speicherplatz zu sparen, wenn es Ihr Anliegen ist. –

+0

MVC ist keine Option ... Ich habe eine Website, die nicht auf MVC neu geschrieben werden kann. Und es gibt keine Kontrolle innerhalb von PlaceHolder, also gibt es nichts außer dem Platzhalter selbst zu deaktivieren. Glücklicherweise wird die Anwendung unter asp.net 4.0 neu kompiliert, also kann ich diesen Vorschlag fortsetzen. Aber andere (wenn überhaupt) sind auch willkommen! – Budda