2017-03-09 2 views
0


Ich benutze Webform (in asp.net 4.5) in meinem Projekt. Aber manchmal ist Wert meine Viewstate Variable verloren. Es erscheint nur 1 oder 2 Mal an einem Tag.Manchmal ViewState Variable ist verloren Wert

Ich habe einen Schnipsel Code in onpreload wie folgt aus:

protected override void OnPreLoad(EventArgs e) 
    { 
     base.OnPreLoad(e); 

     if (!EnableViewState || Form == null) 
      return; 
     if (Session["postbackError"] != null) 
     { 
      Session["postbackError"] = null; 

      //write this error to log file 
      var ex = new Exception("Lost viewstate"); 
      LogErrorUltil.LogError(ex); 
     } 
     if (IsPostBack && Form.Attributes["postback"] == null) 
     { 
      Session["postbackError"] = true;    
     } 
     Form.Attributes["postback"] = "1"; 
    } 

ich in meinem Log sehen, erscheint die Meldung "Lost Ansichtszustand" ist in Protokolldatei schreiben.
aber ich sicher, dass:
1. Web.config nicht
2. App Pool von IIS aktualisiert wird, wird nicht recycelt.

Können Sie mir eine Idee geben, die "Lost Viewstate" in die Protokolldatei geschrieben werden kann, außer 2 Gründe oben?

Ich schätze Ihre Ideen sehr. Vielen Dank für Ihre Ideen.

+0

ViewState und Session sind zwei verschiedene Dinge. – VDWWD

+0

Ja, ich weiß, dass ViewState und Session zwei verschiedene Dinge sind. Aber wie Sie in meinem Code sehen können, setze ich immer Form.Attributes ["postback"] = "1". Aber ich weiß nicht, warum manchmal, Form.Attributes ["Postback"] ist Null in PostBack – user3796752

Antwort

0

Es ist nicht notwendig, Fehlermeldungen in der Sitzung zu behalten, besonders wenn Sie sie in einer Protokolldatei speichern.

Web.config

Web.config wird nicht aktualisiert?

Wenn Sie Ihre web.config ändern, müssen Sie Ihre Anwendung neu erstellen, so wird Form.Attributes["postback"]null sein.

Wenn Web.config nicht aktualisiert wird, dann wird ViewState den Wert Form.Attributes["postback"] beibehalten. Es ist nicht erforderlich, den Wert für jeden Aufruf des Ereignisses OnPreLoad festzulegen. Mit OnLoad Ereignis können Sie alle Werte einstellen, die ViewState passen.

protected void Page_Load(object sender, EventArgs e) 
{ 
    if(IsPostback) 
    { 
     return; 
    } 

    // Set here all the values that will be maintained by 'ViewState' 
    Form.Attributes.Add("postback", "1"); 
    TextBox1.BackColor = System.Drawing.Color.Wheat; 

    /* 
     Set runat="server" and enableviewstate="true" on common html elements 
     if you need to preserve it's values and styles between postbacks 
    */ 
} 


App Pool von IIS nicht

recycelt Wenn Sie App-Pool recyceln Sie ViewState verloren, wenn nicht, ViewState zwischen Postbacks bestehen und gehen verloren, wenn Sie eine andere Seite anfordern.


EnableViewState = "false" OR = Viewstate "Disabled"
Sie müssen den Wert des Form.Attributes["postback"] Attribut setzen, wie Sie getan haben.

+0

Vielen Dank für Ihre Antwort. – user3796752

+0

Gibt es einen anderen Grund, der Exception machen kann ("Lost Viewstate"); erscheint in meinem Protokoll außer 2 Gründen:
1. Aktualisieren Sie web.config.
2. App-Pool von IIS wird
recycelt. Wenn die beiden Situationen auftreten, habe ich den Benutzer zur Anmeldeseite umgeleitet, und die Ausnahme wird nie in die Protokolldatei geschrieben. Ich denke, dass es einen anderen Grund gibt, wie Benutzer lange in dem Formular bleiben, bevor Sie auf Speichern klicken. Es ist ein Grund? Danke für deine Antwort. – user3796752

+0

Ja ist es. In diesem [article] (https://www.iis.net/configreference/system.applicationhost/sites/sitedefaults/limits) erfahren Sie mehr über das Verbindungstimeout. Wahrscheinlich haben Sie diesen Artikel, wonach Sie suchen. –

0

Zunächst einmal erwähnen Sie Viewstate oft in Frage, aber Ihren Code nicht verwenden Viewstate. Stattdessen verwendet es SessionState.

Form.Attributes["postback"] = "1"; ist ein Attribut namens Postbacks zu Form Tag hinzuzufügen. <form ... postback="1">.Es ist nicht ViewState. Der Ansatz ist wirklich seltsam.

Default SessionState timeout is 20 minutes.

Es bedeutet, wenn der Benutzer den Server nach 20 Minuten Leerlauf zugreift, ist Session nicht mehr gültig und es wird null zurück.

Wenn Sie mehr als 20 Minuten wollen, können Sie es in web.config erhöhen.

+0

Ich sehe, dass mein Code Viewstate nicht verwendet hat. Ich mache nur ein Beispiel in meinem Code, um Ideen zu bekommen, welche Sache "Exception (" Lost viewstate ")" in meinem Code erscheinen lässt. Das Sitzungszeitlimit ist kein Grund für mein Problem, da ich bei einem Sitzungszeitlimit den Benutzer zur Anmeldeseite umgeleitet habe, bevor die Funktion ausgeführt wird. – user3796752

Verwandte Themen