2009-08-14 18 views
3

私たち(私と私のチーム)はASP.NET MVCアプリケーションを持っており、Webフォームである1ページまたは2ページを統合しています。我々はWebFormsの部分で、アプリケーションのMVC部分からマスターページを再利用しようとしています。 までウェブフォームでMVCパーシャルビューをレンダリングする方法を見つけました。ポストバックを試行します。これがWebフォームを使用する理由です。ASP.NET MVC、Webformハイブリッド

エラー:

Validation of viewstate MAC failed. If this application is hosted by a Web Farm or cluster, ensure that configuration specifies the same validationKey and validation algorithm. AutoGenerate cannot be used in a cluster.

コードWebフォーム(credited to "How to include a partial view inside a webform")からの部分的なビューをレンダリングする:

public static class WebFormMVCUtil 
{ 
    public static void RenderPartial(string partialName, object model) 
    { 
     //get a wrapper for the legacy WebForm context 
     var httpCtx = new HttpContextWrapper(System.Web.HttpContext.Current); 

     //create a mock route that points to the empty controller 
     var rt = new RouteData(); 
     rt.Values.Add("controller", "WebFormController"); 

     //create a controller context for the route and http context 
     var ctx = new ControllerContext(
      new RequestContext(httpCtx, rt), new WebFormController()); 

     //find the partial view using the viewengine 
     var view = ViewEngines.Engines.FindPartialView(ctx, partialName).View; 

     //create a view context and assign the model 
     var vctx = new ViewContext(ctx, view, 
      new ViewDataDictionary { Model = model }, 
      new TempDataDictionary()); 

     //ERROR OCCURS ON THIS LINE 
     view.Render(vctx, System.Web.HttpContext.Current.Response.Output); 
    } 
} 

このエラーと私の唯一の経験はされていない、Webファームのコンテキストにありますケース。また、私はマシンキーがViewStateの復号化に使用されることを理解しています。

この問題を診断する方法についての情報は高く評価されます。

回避策:これまでのところ 回避策は、その後、Webフォームからわずかの部分図でページを呼び出すために、AJAX呼び出しを使用し、PartialViewにヘッダーの内容を移動することで、次に使用しますPartialViewをMVCビューで直接表示します。また、マスターページの技術以外の部分、つまりMVC固有のもの以外のものを共有することもできます。それでもなお、これは理想的な解決策ではありません。サーバー側のソリューションが依然として求められています。

また、このソルティノは、JavaScriptを使用してより洗練されたコントロールを備えたコントロール、特にサードパーティのコントロールで使用されるような動的に生成されたスクリプトで作業するときに問題があります。

+1

私はこれも解決策を探しています。それはあなたが同じ質問をID#702746で使用しているようです。誰でも?? –

+0

@Kurt Editクレジットを与えるには –

+0

重複:http://stackoverflow.com/questions/230014 –

答えて

0

すべてのMVCページでViewStateを明示的に無効にするようにしてください。

1

Mauricio Scheffer's answerを参照してください。

部分的なビューサブクラスViewUserControl<T>の代わりに彼のViewUserControlWithoutViewState<T>クラスを持っている私のためにこれを解決しました。

0

MAC検証を無効にする方法はありますか?ここで

は、あなたのサイトには、MVCのサイトとビューステートが実際に使用されていないですので、あなたが

Security Note

This attribute should never be set to false in a production Web site.

を無視することができ、リンク

http://msdn.microsoft.com/en-us/library/ydy4x04a.aspx

EnableViewStateMac = falseを

です。

関連する問題