【问题标题】:Insert _ViewStart.cshtml插入 _ViewStart.cshtml
【发布时间】:2013-06-05 13:54:03
【问题描述】:

是否可以仅将 viewstart 用于特定的控制器和视图? 我只在视图文件夹中使用 _Layou.cshtml 文件。 现在我将 _ViewStart.cshtml 添加为视图文件夹内的公共视图,并将 _Layout 移动到共享文件夹。

这是程序结构:

Homecontroller
  public ActionResult Index()
        {
            return View();
        }

Index.cshtml
@{
    Layout = "~/Views/_Layout.cshtml";
}

_Layout.cshtml
{
//design code for Index.chtml
}

根据上面的代码, _Layout 为 homecontroller 渲染。 完成第一行提到的更改后,我将在我使用的每个控制器中的 _Layout.cshtml 中获取控件。 我使用了近 6 个控制器。 如何在不影响整个代码的情况下进行此更改。 请帮忙。

PS:我需要在程序中引入 _ViewStart,因为我正在将 openid 与我已经开发的项目集成。

【问题讨论】:

  • _ViewStart.cshtml 按照惯例意味着在整个区域内使用。如果您希望它不适用于某些视图/控制器,则必须将它们放置在不同的区域中。就您而言,听起来您最好制作不同的布局。

标签: asp.net asp.net-mvc-3 controller views


【解决方案1】:
  1. 您可以创建另一个_ViewStart.cshtml(例如在Views/[controller] 中的子文件夹),它将覆盖根目录,例如:

    @{ Layout = null; }

  2. 您可以简单地使用ViewBag 来确定是否使用布局:

    public ActionResult AnotherAction()
    {
         ....
         ViewBag.NoLayout = true;
    
         return View();
    }
    

    在你的_ViewStart:

    @{
    if (ViewBag.NoLayout == null || !ViewBag.NoLayout)
         Layout = "~/Views/_Layout.cshtml";
    }
    

【讨论】:

    【解决方案2】:

    您可以在 Scott Guthrie 的 Blog 上阅读有关 MVC3 Razor layouts 的更多信息

    【讨论】:

    • 最好给出为什么他想阅读更多有关布局的原因。这将是一个更可靠的答案,并可以帮助将来偶然发现这个问题的任何人。
    • @jesus.tesh 同意你的观点,但最好阅读 Scott Guthrie,还有更多有用的内容可供阅读。
    猜你喜欢
    • 2018-08-04
    • 1970-01-01
    • 2011-12-30
    • 2016-07-30
    • 2015-11-14
    • 1970-01-01
    • 1970-01-01
    • 2019-11-02
    • 2012-06-24
    相关资源
    最近更新 更多