如何直接停止用户加载包含RenderBody()的页面

时间:2015-11-24 17:37:05

标签: asp.net-mvc umbraco

我有一个具有以下结构的Umbraco网站:

Views/LayoutPageA.cshtml/
Views/ContentPageA.cshtml/
Views/ContentPageB.cshtml/

LayoutPageA包含:

<body>
    ...
    RenderBody()
    ...
</body>

和ContentPageA和ContentPageB都包含:

@{
    Layout = "LayoutPageA.cshtml";
}

显然,如果我导航到/LayoutPageA/ContentPageA//LayoutPageA/ContentPageB/页面加载正常但/LayoutPage/会崩溃,因为:

  

文件&#34;〜/ Views / LayoutPageA.cshtml&#34;不能直接请求,因为它调用&#34; RenderBody&#34;方法

如何阻止用户通过网址导航到/LayoutPage/

2 个答案:

答案 0 :(得分:1)

请勿使用Views/LayoutPageA.cshtml/

你应该使用 <a href="/controllerName/actionName"><%= Html.ActionLink("menu1", "actionName", "controllerName") %>

答案 1 :(得分:0)

MVC出现这种情况的唯一方法是,如果您有一个名为LayoutPageA的动作,或者您明确返回LayoutPageA.cshtml作为视图,例如:

return View("LayoutPageA");

所以,就是不要这样做。确保您的操作名称与布局名称不匹配,以便按照惯例将其视为将为操作加载的视图。防止这种情况偶然发生的一个好标准是在布局/部分前面加上下划线,即_LayoutPageA.cshtml。由于动作名称不能以下划线开头,因此布局/部分永远不会按惯例匹配。