UserControl内でホストされているASP.NETフォームでHTTP POSTの後に次のエラーメッセージが表示されます。
ビューステートを読み込めませんでした。ビューステートがロードされているコントロールツリーは、前のリクエスト中にビューステートを保存するために使用されたコントロールツリーと一致する必要があります。たとえば、コントロールを動的に追加する場合、ポストバック中に追加されるコントロールは、最初のリクエスト中に追加されるコントロールのタイプと位置と一致する必要があります。
追加情報は次のとおりです。
最新のサービスパックをすべて適用しました。アイデアが足りなくなった!私もそれを再起動し、サーバーで歌や特別なダンスを含むリッチを実行しましたが、役に立ちませんでした。
さて、答えは文字通り、「最後のものと同じソフトウェアをすべて備えた新しいサーバーをセットアップし、再試行する」であり、それは現在動作しています。
コントロールを動的に追加するときに重要なのは、どのイベントに追加するかです。
ロード後に発生するイベントにコントロールを追加した場合、それらはクライアントに送信するビューステートの一部になります。
LoadViewState
が呼び出される前に、これらのコントロールを再度追加する必要があります。
追加するコントロールの決定自体がViewState
またはコントロールの値に格納されている場合に遭遇した場合、ViewState
がロードされる前であっても、このデータはRequest.Params
追加したばかりですEnableViewState="false"
に私のページのプレースホルダーとその消えました。 uでも機能することを願っています。
このエラーは主にビュー状態の変更中に発生します:フォームテンプレート、リストビュー、詳細ビュー、グリッドビューなどのコントロールで、アイテムテンプレート、アイテムテンプレートの編集の場合と同様に、あるテンプレートから他のテンプレートにASP = .net(すべてのフレームワーク);
コントロール状態からの変更中にItem Template ---> Edit Template
以下が変更されます
1)コントロールが変更されます(IDと状態)
2)ポジションが変更されます。
ビューの変換中にポストバックが発生すると、次のようなエラーが発生します
ビューステートを読み込めませんでした。ビューステートがロードされているコントロールツリー...
(button、link_button_Image_buttonイベントなどの)データバインディングに個別のコントロールを使用している場合、このエラーが報告されます!
このエラーを回避するには>>> メソッド内で1つのテンプレートから別のテンプレートに状態が変化したら、データソースバインディングを呼び出します(クリック中またはポストバッキングイベント中には呼び出さないでください)
Idと同じ値の「name」属性を追加すると、この問題はなくなります。
<input type="button" id="extractBomInfoBtn" name="extractBomInfoBtn" value="Extract" class="button textonly" />
私の場合、問題を引き起こしていたページの読み込み時にasp:Literalの。Textプロパティを操作していました。他のすべてのケースでは、これによってビューステートエラーが発生することはありませんでしたが、この特定のケースでは、。Text値をhtml要素に変更していました。
次のエラーが発生しました:
<asp:Literal ID="SvgIcon" runat="server" />
SvgIcon.Text = "<svg version=\"1.1\" id=\"Layer_1\" bla bla />"
コントロールに明示的にEnableViewState = "false"を追加することでエラーを解決できました:
<asp:Literal ID="SvgIcon" runat="server" EnableViewState="false" />
ページロードイベントに直接コントロールのバインディングメソッドがあるかどうかを確認します。これにより、この問題が発生する可能性があります。
同じ問題がありました。この問題はクライアント側にありましたが、私のローカルシステムでは発生しませんでした。グーグルで何時間も過ごした後、すべての動的コントロールを含むaspxページのテーブルタグにEnableViewState = "false"を書き込み、その後すべてのビューステート変数を削除し、代わりにaspxページにいくつかの非表示のテキストボックスを作成してDB値を受け入れましたコードビハインドでそれらを使用し、コード全体で使用しました。その後、私の問題は解決しました。しかし、それでも、何が問題なのかを理解できませんでした。
ユーザーコントロールごとに新しいPlaceHolderを追加できます。
OR
enableviewstate=false
コントロール上、ビューステートが必要ない場合
これは、コントロールでSaveViewState
をオーバーライドし、LoadViewState
をオーバーライドしない場合に発生する可能性があります。
私の場合、(OnPageIndexChanging)イベントのグリッドビューがあり、ページをクリックしても、2回クリックするまで何も起こりません!
新しいページインデックスを設定する前に、データソースを更新していました。
これは私が間違っていたものです
grd.DataSource = data;
grd.DataBind();
grd.PageIndex = e.NewPageIndex;
これは正しい方法です
grd.PageIndex = e.NewPageIndex;
grd.DataSource = data;
grd.DataBind();