给定razor文件,如何区分是视图还是部分视图?

时间:2017-01-20 16:25:27

标签: asp.net-mvc razor

当我在这样的控制器中添加一个新的ActionResult时

 public ActionResult Step8(AddPropertyStep7ViewModel model)
        {
            return View();
        }

我需要指定我想要返回的视图类型。{查看布局,视图,部分视图}
我知道我想在下面返回这样的文件
这是Step1.cshtml。如何确定它是某个视图还是部分视图?

@using W.Resources
@model W.Models.ViewModels.Agent.AddPropertyStep1ViewModel

@{
    Layout = "~/Areas/Agent/Views/Shared/_Layout.cshtml";
}
<div class="side site--dashboard"> ... <div>

@section scripts
{
   <script> ... </script>
}

2 个答案:

答案 0 :(得分:1)

定义局部视图的基本方法是它具有Layout = null。

但是

即使您的Layout属性中有值,也可以从控制器返回如下视图。

return PartialView("Your_view_name");

它仍然会呈现为部分视图(它不会包含在母版页内容中)。

由于MVC按约定优于配置工作,因此定义部分视图的约定是视图名称应以“_”开头(_MyPartialView.cshtml)

正如您在编辑过的问题中所提到的,您需要指定要返回的视图类型。我不需要你只需要返回布局而不需要别的东西。我上面提出的使用操作方法中的return View()return PartialView()的解决方案将完美运行,您可以决定是否要使用母版页或部分视图呈现页面。

答案 1 :(得分:1)

视图是视图是视图。术语“布局”和“部分”只是更容易讨论视图的使用方式,但它们之间没有功能差异。换句话说,布局是用作布局的视图。部分仅仅是用作部分的视图。没有办法只看一个视图并知道它是什么类型的视图,因为它完全是上下文。

也就是说,布局是一种例外,因为为了真正起到布局的作用,他们需要在某处调用@RenderBody()。但是,您仍然可以使用不将其称为另一个视图的“布局”的视图。它实际上不会呈现视图的HTML:所有返回的都是布局的HTML。

有一种使用下划线为布局/部分添加前缀的约定。但是,这只是一种在项目树中快速查看视图文件有特殊之处的方法。它不是必需的,也不会真正为您提供有关该视图的特殊内容的任何信息。

那就是说,你的问题并不完全清楚。您说您想要指定返回的视图类型,可能来自您的操作。好吧,你实际上已经这样做了。当您返回View()时,您说您希望视图被视为标准视图。如果您想返回部分内容,则必须返回PartialView()。但是,没有办法指定返回的视图必须使用布局。