2010-01-08 87 views
21

当右键单击控制器方法链接到视图时,Visual Studio添加了哪些代码(以及它放在哪里?)?ASP.NET MVC如何链接视图和控制器?

如何在不使用Visual Studio的情况下执行此操作(链接控制器&视图)?

+0

你接受的答案,虽然非常好,信息量大,不回答你的问题,所以你不应该将其标记为接受。 Rajeesh的回答可能是更好的接受。 – Matt 2014-07-29 23:04:04

回答

27

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

当你的控制器,你写

return View(); 

框架假设你想用相同的名称动作名称的视图,并在视图/控制器/文件夹中查找它。然后查看/共享。

但你的行动,你可以写

return View("ViewName"); 

框架将寻找一个名为“视图名”,然后在同一个文件夹视图。

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

1

Visual Studio将在〜/ Views/{YourControllerName}下创建一个文件夹(如果它不存在的话)并将你的视图放在那里。如果它没有在里面找到,它会在〜/ Views/Shared文件夹中查找。如果您想手动创建视图,则需要将页面添加到其中一个文件夹,最好是〜/ Views/{YourControllerName}文件夹。点击NerdDinner教程,看看这个实际操作。

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

+0

是的,我找到了文件夹,我看到了这些文件,但我想知道aspx文件和控制器方法之间的链接(如果有的话)在哪里。 Mi的最终目标不取决于VS精灵 – 2010-01-08 20:51:20

1

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

如果你想手动创建一个MVC .aspx页面中,您需要简单地创建一个空白页面,并提供一个Page指令具有以下属性:

  • 语言(“C#”或“VB”)
  • 的MasterPageFile(默认为〜/查看/共享/的Site.Master
  • 继承(对于强类型的模型,使用的ViewPage < ModelClassName>;否则的ViewPage)

实施例:

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

对于用户控件(.ASCX),相同的规则适用,除了不使用的MasterPageFile属性和你继承ViewUserControl

实施例:

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

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

4

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

感谢,
Rajeesh