2017-03-09 8 views
0


私のプロジェクトでは、webform(asp.net 4.5)を使用しています。 しかし、値の私のviewstate変数が失われます。 1日にちょうど1〜2回現れます。時々ViewState変数が失われる値

私は私のログに表示さ
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"; 
    } 

、「ビューステートを失った」というメッセージがログファイルに記述している:

は、私はそのようなonpreloadでスニペットコードを持っています。
しかし、私は確信していること:
1. Web.configファイルは、IISの
2.アプリケーションプールがリサイクルされていない更新されません。

上記の2つの理由を除いて、「ロストビューステート」をログファイルに書き込むことができますか?

あなたのアイデアを大変感謝します。 あなたのアイデアをありがとうございます。

+0

ViewStateとSessionは2つの異なるものです。 – VDWWD

+0

はい、ViewStateとSessionは2つの異なることが分かります。しかし、私のコードで見ることができるように、私は常にForm.Attributes ["postback"] = "1"を設定します。しかし、私は時々、Form.Attributes ["postback"]がnullであることを知らないPostBack – user3796752

答えて

0

エラーメッセージをセッションに保存する必要はありません(特にログファイルに保存する場合)。

のWeb.config

Web.configは更新されませんか?

web.configを変更する場合は、アプリケーションを再構築する必要があるため、Form.Attributes["postback"]nullとなります。

Web.configがリフレッシュされない場合、ViewStateForm.Attributes["postback"]の値を保持します。 OnPreLoadイベントの各コールに値を設定する必要はありません。 OnLoadイベントでは、ViewStateが注意するすべての値を設定できます。 IISの

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 
    */ 
} 


アプリケーションプールを使用すると、アプリケーションプールをリサイクルする場合は、ViewStateを失って、そうでない場合は、ViewStateはポストバックの間持続し、別のページを要求したときに失われ

リサイクルされていません。


EnableViewState = "false" をしたり、あなたがやったようForm.Attributes["postback"]属性の値を設定する必要が
ViewStateMode = "無効"。

+0

あなたの返事をありがとう。 – user3796752

+0

Exception( "Lost viewstate")を引き起こす別の理由はありますか?私のログには2つの理由以外に表示されます:
1. web.configを更新します。
2. IISのアプリケーションプールはリサイクル
です。 2つの状況が発生した場合、ユーザーをログインページにリダイレクトし、例外がログファイルに書き込まれないためです。私は、保存ボタンをクリックする前に、ユーザーがフォームに長く滞在するような理由があると思います。それは理由ですか?ご返信ありがとうございます。 – user3796752

+0

はい、そうです。この[記事](https://www.iis.net/configreference/system.applicationhost/sites/sitedefaults/limits)では、接続タイムアウトについて詳しく知ることができます。おそらくこの記事にはあなたが探しているものがあります。 –

0

まず第一に、あなたは、あなたの質問にViewStateのを何度も言及したが、あなたのコードは、ViewStateのを使用していませんでした。代わりに、SessionStateを使用します。

Form.Attributes["postback"] = "1";ポストバックにフォームタグという名前の属性を追加することです。 <form ... postback="1">ViewStateではありません。アプローチは本当に奇妙です。

Default SessionState timeout is 20 minutes.

これは、ユーザーがアイドル状態の20分後にサーバーにアクセスする場合、のSessionStateはもはや有効であり、それはnullを返します意味しません。

20分を超える場合は、web.configで増やすことができます。

+0

私のコードはviewstateを使用していないことがわかります。私はちょうど私のコードのサンプルを作成して、 "Exception(" Lost viewstate ")"が自分のコードに現れるかどうかについてのアイデアを得る。セッションタイムアウトが私の問題の理由ではありません。なぜなら、セッションタイムアウトが発生した場合、機能が実行される前にユーザをログインページにリダイレクトしたからです。 – user3796752

関連する問題