我打开了一个示例ASP.NET MVC项目.
在HomeController
我创建了一个名为的方法(动作)MethodA
public ActionResult MethodA()
{
return View();
}
Run Code Online (Sandbox Code Playgroud)
我右键单击MethodA
并创建了一个名为的新视图MethodA1
重新做了它并创建了一个名为的新视图MethodA2
.
这种神奇的关系是如何完成的?我查找配置告诉编译器视图MethodAX
与操作有关MethodA
,但没有找到.
MethodA
调用时控制器将返回什么视图?
Dar*_*rov 57
惯例是,如果您未指定视图名称,则相应的视图将是操作的名称.所以:
public ActionResult MethodA()
{
return View();
}
Run Code Online (Sandbox Code Playgroud)
将呈现~/Views/ControllerName/MethodA.cshtml
.
但您也可以指定视图名称:
public ActionResult MethodA()
{
return View("FooBar");
}
Run Code Online (Sandbox Code Playgroud)
现在~/Views/ControllerName/FooBar.cshtml
将呈现视图.
或者您甚至可以指定一个完全限定的视图名称,该名称不在当前控制器的views文件夹中:
public ActionResult MethodA()
{
return View("~/Views/Foo/Baz.cshtml");
}
Run Code Online (Sandbox Code Playgroud)
现在显然所有这些都假设Razor是视图引擎.如果您使用的是WebForms,请替换.cshtml
为.aspx
或.ascx
(如果您正在使用partials).
例如,如果没有视图,它甚至会告诉您查找视图的位置和顺序:
请记住:ASP.NET MVC完全是关于约定优于配置.
Ale*_*exC 11
MVC框架使用约定优于配置.框架调用ViewResult对象上的ExecuteResult(由返回View();)创建.按惯例,该框架然后在许多位置查找以查找视图
如果您正在使用区域,框架将在以下位置查看视图.
如果没有区域(或者如果您正在使用区域而没有找到视图),框架将查看以下位置
只要Framework测试一个位置并找到一个文件,搜索就会停止,并且找到的视图将用于呈现对客户端的响应.
View方法有许多覆盖版本.最常见的是通过名称调用框架约定之外的特定视图.例如
return View("~/Views/AnotherIndex.cshtml");
Run Code Online (Sandbox Code Playgroud)
作为一个有趣的脚注,即使你有一个特定的视图引擎,框架也会查找遗留的ASP,C#和VB Razor视图(aspx,ascx,cshtml和vbhtml).
归档时间: |
|
查看次数: |
33643 次 |
最近记录: |