【问题标题】:Layout in ASP.NET MVCASP.NET MVC 中的布局
【发布时间】:2014-10-14 14:56:14
【问题描述】:

我已经开始学习 Asp.Net MVC,问题是当我添加一个名为 Index.cshtml 的新视图时,它会自动从 Layout Page 获取 Html。我不知道这里发生了什么。

Index.cshtml :-

@{
   ViewBag.Title = "Index";
 }

 <h2>Index</h2>

布局页面:-

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width" />
<title>@ViewBag.Title</title>
@Styles.Render("~/Content/css")
@Scripts.Render("~/bundles/modernizr")
</head>
<body>
<p>This is a Layout Page....</p>
@RenderBody()

@Scripts.Render("~/bundles/jquery")
@RenderSection("scripts", required: false)
</body>
</html>

【问题讨论】:

    标签: asp.net-mvc asp.net-mvc-4 razor asp.net-mvc-layout


    【解决方案1】:

    只需包含 Layout = null 即可解决您的问题:-

    Index.cshtml :-

    @{
       ViewBag.Title = "Index";
       Layout = null;
     }
    
     <h2>Index</h2>
    

    问题是因为使用了'Layout' 属性,如果你没有明确指定一个值,它的布局将使用_ViewStart.cshtml 文件。在您的视图中指定Layout=null 将导致它忽略_ViewStart.cshtml 文件中指定的布局。

    编辑:-

    如果您想了解更多关于_ViewStart.cshtml 及其工作原理的信息,请访问此链接:-

    Where and how is the _ViewStart.cshtml layout file linked?

    http://www.dotnetcurry.com/showarticle.aspx?ID=605

    【讨论】:

      【解决方案2】:

      这个问题有很多解决方案。 @Exception 发布的第一个是在您的视图中使用 Layout=null 语句。

      您也可以在控制器中返回PartialView()PartialView 不渲染布局,因此即使您的视图是完整视图,使用 PartialView 类型也会导致布局不发生。

      public ActionResult Index() {
          return PartialView("Index");
      }
      

      如果您根本不打算使用任何布局,第三种选择是从您的项目中删除 _ViewStart.cshtml 文件。

      第四个选项是为此操作使用替代布局文件,如果您只是想要此操作的不同布局,您可以使用 Layout="path-to-layout.cshtml"; 指定不同的布局文件

      您还可以嵌套布局,这可以帮助您避免在需要稍微不同的布局的情况下创建这些一次性页面。

      https://stackoverflow.com/a/7603129/61164

      【讨论】:

      • 你好..你真的认为将完整视图作为部分视图是一个好主意...对于一个视图删除 _viewstart 文件也不是一个好主意...
      • @Exception - View 和 PartialView 之间的唯一区别是布局渲染。 PartialView 强制布局为空,就是这样。如果您不打算使用布局,则没有理由拥有 _viewstart 文件。为什么你会认为摆脱你不使用的东西不是一个“好主意”?
      • 这里的用户提到他不想使用布局,用户只想为一个视图禁用它...
      • @Exception - 你真的需要更好地阅读。我的帖子明确表示“如果您根本不打算使用任何布局”。我只是在列出选项。
      • okk..但我认为删除 _viewstart.cshtml 并不是解决问题的好方法...
      【解决方案3】:

      只要让你的布局为空,它就不会呈现主布局

      @{
         ViewBag.Title = "Index";
         Layout = null;
       }
      

      【讨论】:

      • 如果答案相同怎么办? .:P
      • 如果答案是一样的,那么这对把问题放在这里的用户没有好处..
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-02-19
      • 2010-09-18
      • 2018-07-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多