5

http://chriscavanagh.wordpress.com/2008/04/25/systemwebrouting-with-webforms-sample/で説明されているように、従来の Web フォームで ASP.NET 3.5 SP1 System.Web.Routing を使用しています。

すべて正常に動作します。カスタム SEO URL があり、ポストバックも機能します。しかし、ポストバックが常に失敗する場合があり、次のようになります。

ビューステート MAC の検証に失敗しました。このアプリケーションが Web ファームまたはクラスターによってホストされている場合は、構成で同じ validationKey と検証アルゴリズムが指定されていることを確認してください。AutoGenerate はクラスタでは使用できません。

エラーを再現するシナリオは次のとおりです。

  1. ボタンを含む標準の Web フォーム mypage.aspx を作成します。
  2. 「a/b/{id}」を「~/mypage.aspx」にマップするルートを作成します
  3. サイトを実行すると、http://localhost:XXXX/a/b/ページが機能するものに移動できます。しかし、ボタンを押すとエラーが発生します。ルートが単に「a/{id}」の場合、エラーは発生しません。

URLのサブパスの数に関連しているようです。サブパスが 2 つ以上ある場合、viewstate の検証は失敗します。

EnableViewStateMac="false" でもエラーが発生します。

何か案は?バグですか?

ありがとう

4

6 に答える 6

1

このバグは、asp.net mvc ベータ版でも見つかりました。とても再現できます。既定のテンプレートを使用して asp.net mvc アプリケーションを作成した後、デザイン ビューで asp:button コントロールをページ home.aspx に追加し、f5 キーを押すと、ホームページが正しく表示されます。ボタンをクリックすると、このエラーが表示されます。mvc ソース コードをデバッグした後、site.master ページの ViewUserControl が原因であることがわかりました。<% Html.RenderPartial("LoginUserControl"); %> の場合、クリック イベントを適切に処理できます。

enableViewStateMac="false" enableEventValidation="false" viewStateEncryptionMode="Never" のような設定は役に立たないこともわかりました。

mvc ソース コードでは、次のセクションで ViewUserControl のレンダリングを処理します。

public virtual void RenderView(ViewContext viewContext) {

// TODO: Remove this hack. Without it, the browser appears to always load cached output
viewContext.HttpContext.Response.Cache.SetExpires(DateTime.Now);
**ViewUserControlContainerPage containerPage = new ViewUserControlContainerPage(this);**
// Tracing requires Page IDs to be unique.
ID = Guid.NewGuid().ToString();
containerPage.RenderView(viewContext);

}

プライベート シール クラス ViewUserControlContainerPage : ViewPage {

public ViewUserControlContainerPage(ViewUserControl userControl) {
    Controls.Add(userControl);
}

}

ViewUserControl は常に新しく作成されたコンテナー ページでレンダリングされます。このページは設定を選択しません。実際、このセクションに進んで、container.enableViewStateMac を手動で false に変更すると、エラーが解消されます。したがって、これを解決する唯一の方法は、Microsoft に mvc コードの変更を依頼することです。

于 2009-01-09T22:02:39.420 に答える
0

ローカル マシンの Cookie をクリアしてみてください。同じ問題があり、これが役立ちました。

于 2010-04-27T13:33:17.407 に答える
0

私はこれと同じ問題を抱えていました、私はいくつかの悪党を持っていました

<form></form>

タグをページから削除すると、エラーは発生しなくなりました。

于 2008-11-21T03:44:27.183 に答える
-3

ブラウザはsafariですか?もしそうなら、これはおそらく大きなフロートの問題です。そのフロートを削除すると、問題なく動作します。

于 2008-10-23T14:47:58.013 に答える