2010-11-22 6 views
0

Bitte sehen:Was ist das alles in ASP.NET HTML-Ausgabe?

VIEWSTATE "id = "_ VIEWSTATE" value ="/wEPDwUKMTMzMTM1NTAzNA9kFgJmD2QWAgIDD2QWJgIDDw8WBB4LTmF2aWdhdGVVcmwFKGh0dHA6Ly93d3cubGVhcm5kZXZub3cuY29tL1Byb2R1Y3RzLmFzcHgeBFRleHQFCVN1YnNjcmliZWRkAgUPDxYCHwAFHWh0dHA6Ly9vbmxpbmUubGVhcm5kZXZub3cuY29tZGQCBw8PFgIfAAUnaHR0cDovL3d3dy5sZWFybmRldm5vdy5jb20vRGVmYXVsdC5hc3B4ZGQCCQ8PFgIfAAUoaHR0cDovL3d3dy5sZWFybmRldm5vdy5jb20vUHJvZHVjdHMuYXNweGRkAgsPDxYCHwAFJ2h0dHA6Ly93d3cubGVhcm5kZXZub3cuY29tL1NhbXBsZXMuYXNweGRkAg0PDxYCHwAFKWh0dHA6Ly93d3cubGVhcm5kZXZub3cuY29tL3N1YnNjcmliZS5hc3B4ZGQCDw8PFgIfAAUjaHR0cDovL3d3dy5sZWFybmRldm5vdy5jb20vRkFRLmFzcHhkZAIRDw8WAh8ABSxodHRwOi8v ........ (es ist 10-mal größer, aber ich habe es entfernt)

Ist das HTML, dass ASP.NET produzieren? Und macht ASP.NET MVC das gleiche?

+0

Betrachten googeln "asp.net viewstate" –

+3

ViewState ist die beste Sache seit geschnittenem Brot! –

+1

Sie müssen die Größe Ihrer Ansichtszustandsdaten sorgfältig verwalten. Es kann schnell summieren und wirklich Ihre Seiten aufblähen. – rboarman

Antwort

8

Das heißt ViewState.

ASP.NET MVC erstellt ViewState nicht.

+0

In diesem Fall ist ASP.NET MVC schneller als ASP.NET-Sites? weil viele Zeilen in der letzten HMTL-Quelle! – Goma

+3

@Goma, technisch, der kleinere HTML-Code, desto leichter ist die Seitengröße. Die Geschwindigkeit ist variabel, viele Faktoren können die Leistung der Website beeinflussen, wie Bandbreite, Internetgeschwindigkeit des Clients, Serverleistung usw. Wenn man wenig oder keinen Viewstate verwendet, kann der Browser die Initiierung der Seite besser analysieren, aber MVC wird nicht unbedingt als besseres Produkt. –

3

ASP.Net MVC erzeugt keinen Viewstatus, aber das bedeutet nicht notwendigerweise, dass es schneller ist.

Erstens, wenn Sie so viel Viewstate in einer ASP.Net Webforms-Seite haben, machen Sie wahrscheinlich etwas falsch. Es ist nicht schwer, große Viewstates in Webforms zu vermeiden.

Zweitens, die Dinge Webforms in ViewState stellt meist Ersatz für Dinge, die MVC-Seiten bei jeder Anfrage neu erstellen müssen. Bei öffentlichen Internetsites, bei denen die Bandbreite sowohl teurer als auch langsamer als die Verwendung zusätzlicher Serverressourcen ist, funktioniert dies in der Regel zugunsten von mvc. Für das private Intranet im LAN Ihres Unternehmens wird Webforms bevorzugt, bei denen die Upstream-Bandbreite vom Browser zum Webserver frei, reichlich und schnell ist.

+0

So nehmen Webformulare mehr Website-Ressourcen und machen es langsamer? – Goma

+1

Nein, es verschiebt einige Daten aus Ihrer Datenbank in die Webbrowser Ihres Benutzers. Manchmal ist das langsamer, manchmal ist es schneller. –

1

Web Forms verwendet viewstate, um den Steuerungsstatus beizubehalten, wenn Sie auf den Server zurückschreiben. Angenommen, Sie haben ein Textfeld und eine Schaltfläche in einem Webformular. Sie geben etwas in das Textfeld ein und klicken auf die Schaltfläche. Die Schaltfläche führt einen Post zurück zum Server aus. Wenn die Seite neu geladen wird, enthält das Textfeld immer noch den Typ, der vor dem Klicken auf die Schaltfläche eingegeben wurde, es sei denn, Sie haben das Textfeld selbst im serverseitigen Code deaktiviert.

Was tatsächlich passiert ist, war, dass die Daten in der Textbox in der versteckten Viewstate-Feld gespeichert und wieder in das Textfeld bei der Seitenaktualisierung geladen wurden. Der Viewstate sieht wie ein Durcheinander aus, weil er base64-kodiert ist. Sie können Dinge im Viewstate auch manuell speichern. Im page_load Veranstaltung Ihrer Seite nur dies tun:

this.ViewState["someVariable"] = "some value"; 

Nun, wenn Sie diese auf einem Formular leeren Web haben, wenn Sie die Seite laden, werden Sie eine Ansichtszustand Feld in dem HTML-Code wie das sehen Sie klebst (außer viel kleiner). Wenn Sie den Wert aus diesem versteckten Feld kopiert und in einen Viewstate-Decoder (like this one) eingefügt haben, würden Sie eine Variable mit einem Wert von "some value" sehen.

nun eine Schaltfläche auf dem Formular platzieren und in dem Klick des Buttons dies auch tun:

Response.Write(this.ViewState["someVariable"].ToString()); 

Sie werden sehen, „some value“ geschrieben auf der Seite. Was Sie getan haben, war etwas manuell im Viewstate zu speichern, es wurde auf die Seite in diesem versteckten Feld gerendert, dann wurde dieses versteckte Feld zurück auf den Server gepostet und Sie lesen daraus, um die Daten anzuzeigen.

Dies ist die primäre Funktionalität von Webformularen. MVC verwendet nicht viewstate.MVC stützt sich auf eine andere Technik, die als Modellbindung bekannt ist und die nicht in Ihrer Fragestellung enthalten wäre. Google "asp.net mvc model binding" für weitere Informationen darüber, wie mvc Informationen pfostenübergreifend verwaltet.

Etwas Wegthema Beispiel eines Ansichtszustand Witz:

Ich habe eine ziemlich große Community-Site namens U413. Ich habe es kürzlich neu entworfen, um ASP.net MVC 2.0 zu verwenden. Es ist eine Gemeinschaft für Programmierer und sie rämen mich die ganze Zeit für die Verwendung von Webforms. Nun, da es keine Webforms verwendet, habe ich beschlossen, einen kleinen Scherz auf ihnen zu spielen. MVC verwendet nicht viewstate, aber ich ging in ein Webformular und generierte einen Viewstate, der einige Daten enthielt und das versteckte Feld manuell in meine Ansicht in meiner MVC App einfügte.

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

bereits mehrere Leute haben Snooping durch die HTML-Quelle weg Hoffnung, kleine Geheimnisse oder Exploits zu finden und stieß auf diese. Sie entschlüsselten es sofort und lachten gut. Kopiere den Wert und füge ihn in den Decoder ein, mit dem ich früher verlinkt habe, wenn du es sehen willst.