为啥 ASP.NET MVC3 区域和 Razor 视图会产生此错误?

Posted

技术标签:

【中文标题】为啥 ASP.NET MVC3 区域和 Razor 视图会产生此错误?【英文标题】:Why do ASP.NET MVC3 Areas and Razor Views produce this error?为什么 ASP.NET MVC3 区域和 Razor 视图会产生此错误? 【发布时间】:2010-08-22 00:23:40 【问题描述】:

“~/Areas/SomeArea/Views/List/Index.cshtml”处的视图必须派生自 ViewPage、ViewPage、ViewUserControl 或 ViewUserControl。

项目结构几乎是默认的。有一个区域称为 SomeArea。它有一个名为 List 的控制器。除了:

public ActionResult Index()

   return View("~/Areas/SomeArea/Views/List/Index.cshtml");

视图如下:

@inherits System.Web.Mvc.WebViewPage<dynamic>

@
    View.Title = "Index";
    LayoutPage = "~/Views/Shared/_Layout.cshtml";


<h2>Index</h2>

我已尝试逐部分清空整个文件,但似乎没有任何帮助。如果我创建一个控制器并在该区域之外查看它就可以了。是否有可能默认剃须刀视图引擎目前不支持区域?

编辑:区域已注册。

public static void RegisterRoutes(RouteCollection routes)

    routes.IgnoreRoute("resource.axd/*pathInfo");
    routes.MapRoute(
        "Default", // Route name
        "controller/action/id", // URL with parameters
        new  controller = "Random", action = "Index", id = UrlParameter.Optional  // Parameter defaults
    );


protected void Application_Start()

    AreaRegistration.RegisterAllAreas();
    RegisterGlobalFilters(GlobalFilters.Filters);
    RegisterRoutes(RouteTable.Routes);


public override void RegisterArea(AreaRegistrationContext context)

    context.MapRoute(
        "SomeArea_default",
        "SomeArea/controller/action/id",
        new  controller = "List", action = "Index", id = UrlParameter.Optional 
    );

【问题讨论】:

【参考方案1】:

来自 ASP.NET 论坛的回答:

http://forums.asp.net/t/1593209.aspx

这解决了问题。感谢回复!

【讨论】:

【参考方案2】:

Getting the error "The view at '~/Views/Page/home.aspx' must derive from ViewPage, ViewPage<TViewData>, ViewUserControl, or ViewUserControl<TViewData>"类似的问题,可能对你有所帮助。另外,您是否在 global.asax 中注册了您的区域?

【讨论】:

以上是关于为啥 ASP.NET MVC3 区域和 Razor 视图会产生此错误?的主要内容,如果未能解决你的问题,请参考以下文章

asp.net mvc3.0中视图引擎razor和ASPX可以交互使用吗

使用razor/asp.net mvc3生成静态html页面?

ASP.NET MVC Razor

Asp.net MVC3.0用Razor视图如何实现URL伪静态?真诚求教。

Css 在 asp.net mvc3 Razor Views 中无法正常工作

[ASP.NET MVC 小牛之路]03