【问题标题】:mvc 3 razor view engine using "default" views使用“默认”视图的 mvc 3 razor 视图引擎
【发布时间】:2011-06-29 17:10:13
【问题描述】:

我在公司的一个新项目中使用 Razor,我已经玩了 2 天,并且已经发现了一些奇怪的行为恕我直言。

我的 webapp 根目录中有一个 home 控制器,一个 area 中有一个 home 控制器,称之为 Area1。在这两个控制器中,我都有一个 Index 操作,因此我在 Views 根文件夹中有一个 Index 视图,在 Area1\Views 文件夹中有另一个。如果我删除区域内的索引视图,因此 Area1\Views\Index.cshtml 并且我请求 Area1\Home\Index,我不会收到关于视图引擎找不到该操作的视图的错误,而是“基础" 索引视图位于 \Views\Index.cshtml 并呈现。

有人知道这是一个错误还是故意的?如果是这样,有什么方法可以禁用此默认设置?

【问题讨论】:

    标签: asp.net-mvc-3 views asp.net-mvc-areas razor


    【解决方案1】:

    绝对不是错误。

    此行为允许轻松重用 View 模板,例如用于错误处理。

    ASP.NET MVC 的默认行为是,如果您这样做...:

    return View();
    

    ...它在多个位置搜索带有要使用的操作名称的视图模板:控制器的默认命名约定文件夹,即 /Area1/Views/Home/,然后是 /Area1/Views /Shared/ 然后是 Area1/Views/ 然后是 /Views/Shared/ 然后是 /Views/

    如果没有找到与动作名称匹配的视图,则抛出错误。

    默认行为就这么多。要“自定义”此行为,您只需执行以下操作:

    在您的控制器操作中,您可以指定返回时要使用的视图模板的名称。例如:

    return View("MyOtherView");
    

    或者更好,如果使用 T4MVC:

    return View(MVC.Area1.Home.Views.MyOtherView);  // does away with "magic" strings
    

    因此,我认为您不需要关闭默认行为即可(无论)做什么。控制器在那里,嗯,嗯,控制用于向用户显示的视图。这是最佳做法。

    然而,ASP.NET MVC 是非常可配置的,所以我认为有一些方法和方法可以关闭它。

    如果您想这样做,祝您好运,但遵循默认设置并了解 ASP.NET MVC 的工作原理更有意义,尤其是如果您是初学者。

    注意:

    以上适用于 ASP.NET MVC 1、2、3,并将继续这样做。这是所有视图引擎的默认行为,包括 Razor 和 WebForm 视图。

    PS:

    如果您关心的是用户浏览器中 url 的外观,您可以使用路由注册来配置 url。

    【讨论】:

      猜你喜欢
      • 2011-03-11
      • 1970-01-01
      • 1970-01-01
      • 2012-06-24
      • 2011-07-12
      • 1970-01-01
      • 1970-01-01
      • 2011-05-02
      • 1970-01-01
      相关资源
      最近更新 更多