Asp.net mvc MVC2到MV4转换错误
我在MVC2中有一个项目,我将它转换为MVC3,然后我将它转换为MVC4,我使用工具将aspx视图转换为Razor视图, 在转换成功编译的应用程序后,我还安装了MVC3和MVC4,但当我运行应用程序时,它会显示错误 无法强制转换类型为“Microsoft.Web.Mvc.FixedRazorViewEngine”的对象 键入“System.Web.Mvc.WebFormViewEngine” 在Global.asax中Asp.net mvc MVC2到MV4转换错误,asp.net-mvc,Asp.net Mvc,我在MVC2中有一个项目,我将它转换为MVC3,然后我将它转换为MVC4,我使用工具将aspx视图转换为Razor视图, 在转换成功编译的应用程序后,我还安装了MVC3和MVC4,但当我运行应用程序时,它会显示错误 无法强制转换类型为“Microsoft.Web.Mvc.FixedRazorViewEngine”的对象 键入“System.Web.Mvc.WebFormViewEngine” 在Global.asax中 private static void AddViewPaths() {
private static void AddViewPaths()
{
foreach (var engine in ViewEngines.Engines)
{
((WebFormViewEngine)engine).PartialViewLocationFormats =
((WebFormViewEngine)engine).PartialViewLocationFormats.Union(
new string[] { "~/Views/Sample/{0}.aspx", "~/Views/Sample/{0}.ascx" }).ToArray();
((WebFormViewEngine)engine).ViewLocationFormats =
((WebFormViewEngine)engine).ViewLocationFormats.Union(
new string[] { "~/Views/Sample/{0}.aspx", "~/Views/Sample/{0}.ascx" }).ToArray();
}
}
我试着把这些行改成这个,但还是同一个问题,我该怎么办
((WebFormViewEngine)engine).PartialViewLocationFormats =
((WebFormViewEngine)engine).PartialViewLocationFormats.Union(
new string[] { "~/Views/Sample/{0}.cshtml", "~/Views/Sample/{0}.cshtml" }).ToArray();
((WebFormViewEngine)engine).ViewLocationFormats =
((WebFormViewEngine)engine).ViewLocationFormats.Union(
new string[] { "~/Views/Sample/{0}.cshtml", "~/Views/Sample/{0}.cshtml" }).ToArray();
问题是我在ViewEngines中同时使用了Razor和WebForms。Engines集合,我如何才能仅获取Razor视图自从您移动到Razor(MVC 2中不可用),您现在的for循环中提供的不仅仅是
WebFormsViewEngine
。正如现在编写的代码,它试图将Razor引擎强制转换为WebForms引擎,但这是无法完成的。如果您更新了硬铸件并删除了所有其他引擎,它应该可以工作,您可以摆脱for循环-您的集合中只有一个引擎
应用程序启动
//clear all but RazorViewEngine
ViewEngines.Engines.Clear();
ViewEngines.Engines.Add(new RazorViewEngine());
现在,您的更新代码只需
var engine = ViewEngines.Engines.First();
((RazorViewEngine)engine).PartialViewLocationFormats =
((RazorViewEngine)engine).PartialViewLocationFormats.Union(
new string[] { "~/Views/Sample/{0}.cshtml", "~/Views/Sample/{0}.cshtml" }).ToArray();
((RazorViewEngine)engine).ViewLocationFormats =
((RazorViewEngine)engine).ViewLocationFormats.Union(
new string[] { "~/Views/Sample/{0}.cshtml", "~/Views/Sample/{0}.cshtml" }).ToArray();
如果您决定不删除所有引擎,那么您必须在for循环中执行
If/else
,以确定转换引擎的方式。但是您在修复中没有更改任何内容:您仍然试图将engine
转换为WebFormViewEngine
@Rup-您是对的。我只是在VS中检查我的答案,并确认我必须强制转换到特定的视图引擎。如果OP从集合中移除所有引擎并更改其演员阵容,则他应处于清场。上面的编辑是为我编译的,但因为我真的不知道这是做什么的,所以我无法进一步测试。感谢您指出需要维护显式强制转换!:)