【发布时间】:2010-11-19 16:18:44
【问题描述】:
我们(我和我的团队)有一个 ASP.NET MVC 应用程序,并且我们正在集成一两个 Web 窗体页面。我们正在尝试在 WebForms 部分中重用应用程序的 MVC 部分中的母版页。我们找到了一种在 Web 表单中呈现 MVC 部分视图的方法,效果很好,直到我们尝试回发,这就是使用 WebForm 的原因。
错误:
视图状态 MAC 验证失败。如果 此应用程序由 Web 托管 场或集群,确保 配置指定 相同的validationKey和validation 算法。无法使用自动生成 在一个集群中。
从 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);
}
}
我对这个错误的唯一经验是在网络农场的环境中,但事实并非如此。另外,我知道机器密钥用于解密 ViewState。
任何有关如何诊断此问题的信息将不胜感激。
解决方法: 到目前为止,解决方法是将标题内容移动到 PartialView,然后使用 AJAX 调用从 WebForms 中调用仅包含 Partial View 的页面,然后直接在 MVC 视图上使用 PartialView。此外,我们仍然能够共享母版页的非技术特定部分,即任何非 MVC 特定的部分。尽管如此,这还不是一个理想的解决方案,仍然需要一个服务器端的解决方案。
此外,此解决方案在处理具有更复杂控件的控件时存在问题,使用 JavaScript,尤其是由 3rd 方控件使用的动态生成的脚本。
【问题讨论】:
-
我也在寻找解决方案;看来您也在 SO question id#702746 中使用相同的技术。有人吗??
-
@Kurt 编辑给予信用
-
不确定我是否完全同意这是一个重复的问题,但谢谢你,mausch - 你之前埋在该帖子下的答案是一个可行的解决方案,尽管我肯定会更多地研究它。谢谢! @Greg - 看到这个stackoverflow.com/questions/230014/…
标签: asp.net asp.net-mvc webforms