2009-08-14 135 views
3

我們(我和我的團隊)有一個ASP.NET MVC應用程序,我們正在集成一個或兩個Web窗體。我們試圖在WebForms部分的應用程序的MVC部分中重用Master Page。我們發現在渲染網頁表單的MVC局部視圖,它的偉大工程,直到我們嘗試做回發,這是使用一個WebForm的原因的一種方式。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.

代碼從一個WebForm (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。

有關如何診斷此問題的任何信息,將不勝感激。

一個變通辦法: 到目前爲止的解決辦法是在頭內容移動到PartialView,然後使用AJAX調用來調用頁面只偏查看從Web窗體,然後使用直接在MVC視圖上進行部分視圖。此外,我們仍然可以分享Master Page的非技術特定部分,即任何非MVC特定的部分。但是,這還不是一個理想的解決方案,仍然需要服務器端解決方案。

而且,與具有更復雜的控制的控制工作時,使用JavaScript,13759第三方控件尤其動態生成的腳本這個solutino有問題。

+1

我正在尋找解決方案,它似乎你也在SO問題ID#702746中使用相同的技術。任何人?? – 2009-08-14 15:07:49

+0

@Kurt編輯製作給予信貸 – 2009-08-14 15:12:00

+0

重複:http://stackoverflow.com/questions/230014 – 2009-08-15 13:33:15

回答

0

嘗試在所有MVC頁面禁用ViewState中明確。

1

Mauricio Scheffer's answer

有部分觀點繼承他的ViewUserControlWithoutViewState<T>類,而不是ViewUserControl<T>解決了這個對我來說。

0

如何禁用MAC驗證?

這裏是一個鏈接

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

EnableViewStateMac =假

可以忽略

Security Note

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

,因爲你的網站是一個MVC網站和視圖狀態不是真正使用。