【问题标题】:add logic to _ViewStart.cshtml向 _ViewStart.cshtml 添加逻辑
【发布时间】:2016-12-01 06:45:19
【问题描述】:

有没有办法在 _ViewStart.cshtml 文件中添加逻辑来驱动使用哪个 _Layout 文件?

从概念上讲,我想做下面的代码(ViewBag.Context 在 Home 控制器中确定)。但是我在 ViewBag 下得到一个红色的波浪线(在当前上下文中不存在)。我想这是一个问题,因为这个视图页面不知道哪个控制器/方法正在调用它。

@{if (ViewBag.Context == "AA")
    {
        Layout = "~/Views/Shared/_Layout_AA.cshtml";
    }
    else
    {
        Layout = "~/Views/Shared/_Layout.cshtml";
    }
}

【问题讨论】:

    标签: c# asp.net-mvc razor


    【解决方案1】:

    FWIW,您也可以在控制器中执行此操作:

    if (someCondition == "AA")
    {
        return View("MyView", "~/Views/Shared/_Layout_AA.cshtml");
    }
    else
    {
        return View ("MyView", "~/Views/Shared/_Layout.cshtml");
    }
    

    【讨论】:

      【解决方案2】:

      使用 PageData 属性(它更适用于 ASP.NET WebPages,在 MVC 中很少使用) 设置:

      @{
          PageData["message"] = "Hello";
      }
      

      检索

      <h2>@PageData["message"]</h2>
      

      来源:How do I set ViewBag properties on _ViewStart.cshtml?

      【讨论】:

        【解决方案3】:

        使用三元运算符:

        @{
           Layout = ViewBag.Context == "AA" ? "~/Views/Shared/_Layout_AA.cshtml" : "~/Views/Shared/_Layout.cshtml" ;
          }
        

        【讨论】:

          【解决方案4】:

          你们中的一些人没有看到“但是我在 ViewBag 下得到一个红色波浪线(在当前上下文中不存在)。我想这是一个问题,因为这个视图页面不知道哪个控制器/方法正在调用它。”

          我的解决方案是在开始时将值嵌入到控制器中的 cookie 中。然后在 _ViewStart.cshtml 文件中,我检索 cookie 值,现在可以使用它来指示我的布局逻辑。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2018-07-28
            • 2021-06-22
            • 1970-01-01
            • 2015-05-14
            • 2018-01-07
            • 2021-02-14
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多