ASP.NET MVC3部分视图命名约定

时间:2011-04-21 23:43:35

标签: asp.net asp.net-mvc-2 asp.net-mvc-3 razor partial-views

我是MVC开发的新手,所以请耐心等待。是否真的有必要将我的部分视图命名为_Action.cshtml(使用_下划线)以符合命名约定?

这是我的问题我有一个控制器(StudentController)和一个动作(List),它有一个名为“List.cshtml”的部分视图文件,并且有

@{ Html.RenderAction("List", "Student"); } 

在我的HomeController - Index视图中显示这个部分视图。但是,如果我将我的部分视图命名为_List.cshtml,那么它当然不会起作用。 Visual Studio甚至找不到我的动作学生 - 列表的视图,因为它认为它仍然在寻找与我的动作(List.cshtml)完全相同的名称。我该怎么办?

我习惯于使用ascx.cs配对的ASP.NET ascx。 :(

3 个答案:

答案 0 :(得分:57)

没有必要使用下划线,但对于无意直接提供的文件,这是一个常见的约定。

要解决此问题,您可以选择以视图名称作为参数返回View或PartialView。

return View("_List");

return PartialView("_List");

或在另一个视图中

@{ Html.RenderPartial("_List"); }

答案 1 :(得分:1)

如果部分视图依赖于ActionMethod并始终通过Action方法呈现,则应该使用与此操作方法相同的部分视图名称

public PartialViewResult List()
     {
        DoSomthing();
        //PartialView() return a "List "Parial View  
        return PartialView();
     }

但是如果你的局部视图不依赖于动作方法而直接按照这样的视图调用

@Html.RenderPartial("_List"); 

答案 2 :(得分:0)

首先,对于任何平台来说,没有什么新鲜的可耻之处。这是八年前,所以您可能不再是新手。您可以使用任何想要使用的命名约定。我使用原始的MVC命名约定,该约定只对共享视图使用下划线(_)。部分视图应根据其操作来命名。您的情况下,视图名称将为Action.cshtml,除非这是当然的共享视图。

我的推理很简单。如果您从某个操作调用View或PartialView而未提供viewName,则它将假定该视图的名称为该操作的名称。 _Layout.cshtml也用下划线命名。这是因为它是共享的,而不是因为它是局部视图。这个错误在MVC世界中无处不在。人们对此确实非常热心。不知道为什么。命名约定由商店决定。

辅助方法Html.RenderActionHtml.Action调用控制器上的操作。辅助方法Html.RenderPartialHtml.Partial允许您将模型直接传递到Razor视图,而无需通过操作。

最后一件事情,叫Action而不是RenderAction。仅当您已经在代码块中时才调用RenderAction。这几乎是从来没有的情况。我看到人们使用RenderAction,然后只是由于构建中断而不必要地在其周围添加了代码块。以下两个代码段完全相同,而我认为第二个代码段更具可读性。我放置div来强调代码不在代码块中:


<div>
    @{ Html.RenderAction("List", "Student"); } 
</div>

<div>
    @Html.Action("List", "Student")
</div>

最重要的是不要不必要地使用下划线或花括号。它们是丑陋的人物,我们应该避免使用它们。 ;)