【问题标题】:ASP.NET MVC3 Partial View naming conventionASP.NET MVC3 局部视图命名约定
【发布时间】:2011-08-10 16:37:48
【问题描述】:

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

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

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

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

我已经习惯了 ASP.NET ascx 与配对 ascx.cs 代码。 :(

【问题讨论】:

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


    【解决方案1】:

    没有必要使用下划线,但它是不打算直接提供的文件的通用约定。

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

    return View("_List");
    

    return PartialView("_List");
    

    或在另一个视图中

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

    【讨论】:

    • @ataddeini 感谢您的回复,但我这个部分视图需要运行一段代码才能显示?像这种局部视图必须查询当前用户的所有科目/成绩。从控制器调用操作是一种好习惯吗?
    • 就像您在最初的帖子中一样,在视图中使用@{ Html.RenderAction("List", "Student"); }?这是合理的,只要在您的操作中返回PartialView("_List", model),您就应该能够像任何其他操作一样使用它。如果您不喜欢使用字符串来指示要返回的视图(就像我一样),您可以考虑使用 T4MVC,它是 MvcContrib 项目的一部分。希望有帮助!
    • 成功启动了使用 MVC2 和 T4MVC 构建的 CRM 系统后,我衷心建议不要使用 T4MVC。除了用另一种类型的字符串替换字符串之外,T4MVC 对我没有任何好处。它生成的 Action 方法也无法使用,最终我使用的只是花哨的字符串名称。将此与 T4MVC 复合导致我导致我们的站点面临停机。在我进行拉取和构建后,我在没有运行自定义工具来重新生成 T4MVC 文件的情况下部署了站点,这导致文件不同步导致奇怪的运行时错误。
    • 还有更多来自实践架构师的建议,mvc 约定非常好,如果没有非常令人信服的理由,我会避免更改它们。 MVC 和 Razor 是 Web 表单的重大转变,接受这一点并记住不要从使用 MVC 处理 Web 表单的方式中寻求解决方案。
    • @Chris:我同意 T4MVC 生成的许多属性实际上只是魔术字符串。您仍然需要以某种方式将它们与它们的使用分离,就像使用字符串一样。实际上,主要的好处是 Intellisense 发现。不幸的是,很容易陷入“不再有魔线!”当你开始使用它并把自己搞砸时陷阱。
    【解决方案2】:

    如果部分视图依赖于 ActionMethod 并且总是通过 Action 方法渲染,你应该像这样将部分视图名称与 action 方法相同

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

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

    @Html.RenderPartial("_List"); 
    

    【讨论】:

    • 这对我来说很有意义,但是是否有任何“官方”指南/建议支持这一点?
    • 是的,每个人都搞错了。下划线命名最初是为 SHARED 视图创建的。部分视图应以其操作命名。
    【解决方案3】:

    首先,对任何平台都不陌生。这是八年前的事了,所以你可能不再是新人了。您可以使用任何您想使用的命名约定。我使用原始 MVC 命名约定,该约定仅对 共享视图使用下划线 (_)。 部分视图应以其操作命名。在您的情况下,视图的名称将是 Action.cshtml,除非这是一个共享视图。

    我的理由很简单。如果您从操作调用 View 或 PartialView 并且不提供 viewName,则它假定视图的名称是操作的名称。 _Layout.cshtml 也用下划线命名。这是因为它是共享的,而不是因为它是局部视图。这个错误在 MVC 世界中无处不在。人们对此真的大错特错。不知道为什么。命名约定由商店自行决定。

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

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


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

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

    底线是不要不必要地使用下划线或花括号。他们是丑陋的角色,我们应该避免他们。 ;)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多