Frage

ich von der klassischen ASP zu ASP.NET bewege und erlebt haben, was viele von Ihnen bereits wissen, wie „Viewstate“. Ich könnte die Waffe mit meiner Annahme springen, aber es sieht sehr umständlich. Ich habe viele ASP-Formulare in der Vergangenheit entwickelt und hatte nie Probleme mit Zustand zu halten. Gibt es eine andere Art und Weise OR werde ich diese Sache in ASP.NET Viewstate lernen? Ich bin mit Visual Studio 2008, VB.NET als die Code-behind Sprache und Framework-Version 3.5 mit SQL Server 2005.

War es hilfreich?

Lösung

Sie haben nicht zu tun. Schauen Sie sich MVC-Framework . Es beseitigt Viewstate und arbeitet als alte ASP (zumindest aus dieser Sicht).

Andere Tipps

Diese Serie von Beiträgen ist, muss das Lesen für das Verständnis Viewstate

ich deaktivieren Sie es und tun die meisten meiner Arbeit in Page_Init statt Load (Werte werden nach wie vor wegen der Control gehalten). Diese Einrichtung hat sich für mich gut funktioniert.

Viewstate ist optional, aber hilfreich. Was ist Viewstate, ist alle Änderungen, die auf einer Steuerung auf der Server-Seite auftreten. Also, wenn Sie Text zu einem Etikett sind zuweisen, und Sie möchten, dass der Text, ohne die Notwendigkeit beharren sie auf jedem Postbacks neu zuweisen, dann sollten Sie, dass halten. Ein weiteres Beispiel, wo ich verlassen Viewstate immer ist alles Databound.

Das heißt, es gibt Zeiten, wenn es nützlich ist Viewstate für den gleichen Grund auszuschalten. Zum Beispiel, der einzige Ort, wo ich immer drehen Viewstate off ist ein MESSAGE-Label. Auf diese Weise, wenn ich eine Nachricht an den Benutzer zum Ausdrucken (eine, die nur einmal vorkommen soll und dann weggehen) ich nur den Text auf das Etikett hinzufügen und dann vergessen Sie es. Während die nächsten Postback wird das Etikett automatisch in den Text zurückkommen, die für das Steuerelement in der ASPX Erklärung gefunden wird (in diesem Fall eine leere Zeichenkette).

Nun, beachten Sie, dass dies nichts mit der Form Sammlung zu tun hat, die die Werte geschrieben sind während des Postback IIS. Die Form Sammlung sendet die Werte, die der Benutzer tritt in Formelemente (Textfelder, Kontrollkästchen, droplists, etc). Diese .NET wird in den entsprechenden Platz füllen - und dies geschieht nach Viewstate verarbeitet wurde.

Auf diese Weise, wenn Sie ein Textfeld mit der Phrase „hallo dort“ an den Client senden, ändert sich der Benutzer es zu „See ya“ und legt dann das Formular aus, was die Textbox von der Zeit ist die Page_Load-Ereignis ausgelöst haben ein Textfeld mit "See ya" im TEXT-Attribute.

In der klassischen ASP wir immer verwenden nur ein verstecktes Feld, um den Job zu erledigen. Ansichtszustand ist nur eine Möglichkeit, dass automatisch für Sie tun. Vertrauen Sie mir die Lernkurve ist nicht so hoch wie Sie vielleicht denken.

Einige Kontrollen tief gelähmt, wenn Sie Viewstate deaktivieren, so vorbereitet werden, um diese Bedenken auszuräumen. Es ist am einfachsten, nur faul und lassen Sie es auf, aber nicht gegengesteuert wird, leicht für Viewstate 30% der Größe der HTML-Konto kann.

Zum Beispiel, sagen Sie ein DropDown haben, und Sie binden es in eine Liste der Früchte. Sie binden es in der if (! IsPostBack) {} Block in der Seite zu laden. Wenn Sie Viewstate deaktivieren, werden Sie die Einzelteile verlieren, wenn Sie auf eine Schaltfläche klicken. Sie müssen jede Seite zu laden, gebunden zu sein. Sie werden auch Ihre ausgewählten Index verlieren, so dass Sie, dass aus der Request.Form ziehen bräuchten auf [] Variablen.

Viewstate ist Teil des Pakets, wenn Sie mit ASP.NET arbeiten. Für eine grundlegende Seite / Website sollten Sie nicht müssen ‚wissen‘, wie Viewstate zu verwenden. Es wird nur verwendet, wie Sie Steuerelemente auf den Seiten setzen.

Es ist ziemlich schwer Viewstate mit ASP.NET zu vermeiden, denn selbst wenn Sie es aus auf Projektebene drehen, noch einige einzelne Steuerelemente Viewstate verwenden, um ihre Informationen bestehen bleiben.

Wenn Sie nicht mit Viewstate beschäftigen möchten, sollten Sie die ASP.NET MVC-Framework verwenden. Sie werden mit dem MVC-Framework kommt aus klassischen ASP wahrscheinlich mehr Komfort.

Viewstate ist komplett optional in fast alle, wenn nicht in allen Fällen. ASP.NET wieder auffüllt Felder automatisch, auch wenn ViewStateEnabled = false. Ich habe für 5 oder 6 Jahre ASP.NET benutzen und habe noch nie auf Viewstate abzuhängen. Ich deaktivieren Sie es selbst, wenn ich kann.

Viewstate arbeitet automatisch für den größten Teil. Es ist nur so, wie ASP.NET Überblick über den aktuellen Zustand aller hält es die Kontrollen.

Sie können manuell Ansichtszustand verwenden, wenn Sie zusätzliche Daten gespeichert werden sollen. Das ist so einfach wie:

Viewstate["Key"] = value;

Die einzige Einschränkung dabei ist, dass jedes Objekt, das Sie in Ansichtszustand speichern müssen serialisierbar sein.

Ich kann auf jeden Fall zu vermeiden Viewstate in Datagrids und Dropdownlists empfehlen, weil ich vor kurzem gerade erst begonnen, es selbst zu tun. Ich tat dies nicht zum Spaß, ich hatte eine Seite zu beheben, die so groß geworden war, dass es andere Probleme verursacht wurde. Aber das stellte sich heraus, einfach zu sein, und die Ergebnisse waren so dramatisch, dass ich bin sehr zufrieden. Natürlich für eine kleine einfache Anwendung oder für kleine Datenmengen nicht notwendig sein, dies, aber auf der anderen Seite ist es gut, konsequent zu sein (immer von bekannten gehen zu bekannten, so dass Sie ständig Ihren Prozess verbessern können ...), und warum tragen um zusätzliches Gepäck, je?

Dies wird ein wenig manuellen Eingriffe auf Ihrer Seite benötigen. Zum Beispiel, wenn Sie Ansichtszustand für Dropdown-Listen zu deaktivieren, müssen Sie sie auf jedem Postback erneut zu binden, und dann die SelectedValue aus dem Request-Objekt wiederherzustellen. Sie werden auf diese lesen müssen, aber Google hat viele leicht zugängliche Informationen.

Viewstate wird automatisch für asp.net controls „verwurzelt“ gehalten auf der Seite. Es gibt wenig, müssen Sie die Werte tun, und einige andere Informationen werden in einem versteckten Eingang B64 codierten übergeben. Sie können es betrachten, wenn Sie wollen, aber es spielt keine Rolle, es ist alles für Sie automatisch gehandhabt wird.

Wenn Sie Code für Ihre eigenen Verbrauch schreiben, können Sie einfach abschalten und sich keine Sorgen.

Vermutlich wirst du Web Forms Code geschrieben von anderen Menschen halten, sollten Sie so wissen, was die Konfigurationsoptionen und Schmerzpunkte sind. Top wenigen, die ich mir vorstellen kann

  • Wie deaktivieren es vor Ort, Seite und Steuerungsebene
  • warum MachineKey in Webfarmen relevant ist
  • , warum Ihr Ereignisprotokoll ist voll von ViewStateAuthentication Fehler
  • was ViewStateUserKey ist

Im Hinblick auf die tatsächlichen Lernkurve ist dies wahrscheinlich eine gründliche Lesen von ein paar MSDN-Artikel.

Viewstate ist ein notwendiges Übel inhärent auf die Web-Metapher bildet. Ich persönlich finde diese Methode veraltet, aufgebläht und in der Regel nicht webfreundliche. Bessere Besuche MVC-Framework, wie oben vorgeschlagen.

Ich schlage vor, Sie die Versuchung vermeiden Viewstate als „Cache“ zu verwenden, um Daten zu übergeben hin und her (Ich habe Websites wegen Clustered-Setup tun dies gesehen und kein SQL-backed Sitzungsstatus). Die Daten serialisiert werden und zu der Seite und muss jede Anfrage tun Roundtrips, indem auf die Gesamtgröße der Seite und machen Sie Ihre Website langsamer zu laden.

'<%@ Control Language="C#" AutoEventWireup="true" CodeFile="HomePage.ascx.cs" Inherits="HomePage" %>
<script runat="server">
  void testHF_ValueChanged(object sender, EventArgs e)
    {
       this.HFvalue.Text = this.testHF.Value ;

    }
</script>
<asp:Label ID="UserNamelbl" runat="server" Text="User Name : " Visible="false"></asp:Label>
<asp:TextBox ID="UserNametxt" runat="server" Visible="false" ></asp:TextBox>
 <asp:Label ID="HFvalue" Text="......" runat="server"></asp:Label>
 <asp:HiddenField ID="testHF"
OnValueChanged="testHF_ValueChanged"
value="" 
runat="server" ></asp:HiddenField>
<input type="submit" name="SubmitButton" value="Submit" onclick="CL()" />

<script type="text/javascript">
    function CL() 
    {
        this.testHF.Value = this.UserNametxt.Text;  
    }
</script>
'
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top