ASP.NET MVC 如何链接视图和控制器?

Posted

技术标签:

【中文标题】ASP.NET MVC 如何链接视图和控制器?【英文标题】:How does ASP.NET MVC link views and controllers? 【发布时间】:2010-01-08 20:33:08 【问题描述】:

当您右键单击控制器方法以链接到视图时,Visual Studio 会添加哪些代码(以及放在哪里?)?

如果没有 Visual Studio,如何做到这一点(链接控制器和视图)?

【问题讨论】:

您接受的答案虽然非常好且内容丰富,但并未回答您的问题,因此您不应将其标记为已接受。 Rajeesh 的回答也许更容易接受。 【参考方案1】:

这都是惯例。 您将视图放置在每个控制器的 Views/ControllerName 文件夹中,这是框架要查找的默认位置。但无论如何都不是必须的。

当你在控制器中编写时

return View();

Framework 假设您希望视图与操作名称具有相同的名称,并在 Views/Controller/ 文件夹中查找它。然后查看/共享。

但是在你的行动中你可以写

return View("ViewName");

Framework 将在相同文件夹中查找名为“ViewName”的视图。

因此,视图的默认名称将是正在执行的操作的名称。这是一个约定。

【讨论】:

如此简单,但超级有用。谢谢你简洁。仅供参考,这也适用于 PartialView("ViewName") 并且您也可以在这两种方法中传递您的模型:View("ViewName", model)【参考方案2】:

默认情况下,asp.net MVC 使用 FormViewEngine,它是 IViewEngine 的一个实现。 IViewEngine 有两个方法叫做“FindView”和“FindPartialView”,它们实际上是从“Views/Controller/”文件夹中定位视图文件。

谢谢,Rajeesh

【讨论】:

【参考方案3】:

Visual Studio 将在 ~/Views/YourControllerName 下创建一个文件夹(如果它不存在)并将您的视图放在那里。如果在其中找不到它,它将在 ~/Views/Shared 文件夹中查找。如果要手动创建视图,则需要将页面添加到这些文件夹之一,最好是 ~/Views/YourControllerName 文件夹。访问 NerdDinner 教程,了解实际情况。

http://nerddinnerbook.s3.amazonaws.com/Intro.htm

【讨论】:

是的,我找到了文件夹,并且看到了那些文件,但我想知道 aspx 文件和控制器方法之间的链接(如果有的话)在哪里。我的最终目标不取决于那个 VS 向导【参考方案4】:

Visual Studio 使用模板来创建默认视图。模板位于 [Visual Studio 安装目录]\Common7\IDE\ItemTemplates[CSharp|VisualBasic]\Web\MVC\CodeTemplates 文件夹中。

如果您希望手动创建 MVC .ASPX 页面,您只需创建一个空白页面并提供具有以下属性的 Page 指令:

语言(“C#”或“VB”) MasterPageFile(默认为 ~/Views/Shared/Site.Master) 继承(对于强类型模型,使用 ViewPageModelClassName>;否则使用 ViewPage

例子:

<%@ Page Language="C#" MasterPageFile="~/Views/Shared/Site.Master" Inherits="ViewPage<ListCompanyManagerDetailsViewModel>" %>

对于用户控件 (.ASCX),适用相同的规则,但不使用 MasterPageFile 属性并且您从 ViewUserControl 继承。

例子:

<%@ Control Language="C#" Inherits="ViewUserControl<Contact>" %>

附:命名空间不在我的任何类名之前的原因是因为我在 web.config 的部分中声明了它们。

【讨论】:

以上是关于ASP.NET MVC 如何链接视图和控制器?的主要内容,如果未能解决你的问题,请参考以下文章

如何确定视图中动作的上下文(asp.net mvc)

ASP.NET MVC & C#:将视图模型传递给控制器

asp.net mvc如何为控制器的动作指定视图

如何在asp.net mvc中将数据从视图传递到控制器

如何继承 ASP.NET MVC 控制器并仅更改视图?

Asp.Net MVC:如何获取当前控制器/视图的虚拟 url?