【问题标题】:Disable layout in ASP.NET MVC?禁用 ASP.NET MVC 中的布局?
【发布时间】:2010-09-18 05:35:52
【问题描述】:

在 MonoRail 中,您只需 CancelLayout() 即可不呈现布局。在 ASP.NET MVC 中,影响布局的唯一方法似乎是将布局名称传递给 View() 方法,例如 View("myview", "mylayout");只是似乎传递 null 或空字符串并不能满足我的要求。

我最终创建了一个只呈现内容的空布局,但这看起来很愚蠢。

“不渲染布局”就是这个意思。在 Web 表单视图引擎中,他们将布局称为“母版页”。我想呈现我的操作视图,而不是用母版页包围它。

【问题讨论】:

  • 如果您无法准确解释您要查找的内容,您将不会得到任何其他答案。 “不渲染布局”是什么意思?
  • 必须创建一个空的布局可能看起来很傻,但是 webforms 引擎怎么知道如何为 asp.net 内容部分排序?我觉得这更多是您使用的网络表单视图引擎的问题。

标签: asp.net-mvc


【解决方案1】:

在 MVC 3 中,您可以删除主布局代码:

   @{
    Layout = "";    
    }

【讨论】:

  • 这是在视图中吗?控制器仍然没有办法做到这一点吗?不是我在乎,只是有趣:)
【解决方案2】:

在视图的开头添加:

@{
    Layout = null;
}

如果您希望保留样式表,则需要在该视图中添加对它的引用。

【讨论】:

  • 这在 Razor 视图中有效,但在控制器中无效,正如 Aaron 最初询问的那样。
【解决方案3】:

要对所有页面禁用此功能,请编辑 _ViewStart.cshtml(在根目录中的“Views”文件夹下),并确保它包含以下内容:

@{
  Layout = null;
}

要为任何特定视图启用模板,可以将以下内容添加到该视图的 .cshtml 文件中,以启用模板:

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

【讨论】:

    【解决方案4】:

    在Controller动作中我们可以设置需要的布局。

    return View("Index", "_LAYOUT_NAME", model);
    

    https://stackoverflow.com/a/5161384/2039603

    【讨论】:

      【解决方案5】:

      我在正确答案中看到它说“在 ASP.NET MVC 版本中这似乎是不可能的”

      您使用的是哪个版本?因为我找到了解决您问题的方法(我遇到了同样的问题)

      因此,要禁用页面中的布局,您应该使用:

      @{
         Layout = null;
      }
      

      而且,正如here 所建议的那样,这可以解决您的问题:

      public ActionResult Index()
      {
        SampleModel model = new SampleModel();
        //Any Logic
        return View("Index", "_WebmasterLayout", model);
      }
      

      【讨论】:

        【解决方案6】:

        创建局部视图,而不是使用普通视图。然后可以单独使用它们,其行为非常类似于 CancelLayout() - 或者您可以将它们合并到引用母版页的视图中,在这种情况下它将是完整的布局。如果您想发回部分 HTML 块以响应 AJAX 请求,它们也很有用。

        【讨论】:

          【解决方案7】:

          尝试将masterPage 参数设置为""null 并返回View (就像我没有)一样没有运气?

          然后试试这个并改用PartialView

             public ActionResult Article(string id)
              {
                  return PartialView("~/Areas/Store/Views/CustomerService/" + id);
              }
          

          我需要这样做以从 JS 异步加载视图的内容。

          【讨论】:

            【解决方案8】:

            在我询问的 ASP.NET MVC 版本中,这似乎是不可能的。

            【讨论】:

              【解决方案9】:

              您可以创建一个几乎可以执行任何操作的自定义 ActionResult。 ActionResult 控制作为响应发送回客户端的内容。创建一个扩展 ActionResult 但什么都不做的类将是微不足道的。

              【讨论】:

              • 他不想要一个空的结果,他想要一个没有布局的结果。
              【解决方案10】:

              另一种方法是实际指定一个布局,但将该布局留空 “_EmptyLayout.cshtml”不包含任何内容,或者只是一条说明它不包含任何内容的评论,因此稍后有人会按预期看到它。

              【讨论】:

                猜你喜欢
                • 2014-10-14
                • 1970-01-01
                • 1970-01-01
                • 2017-02-19
                • 2018-07-09
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                相关资源
                最近更新 更多