本文实例分析了ASP.NET MVC中的视图生成过程。。具体如下:
在 ASP.NET MVC 中,我们将前端的呈现划分为三个独立的部分来实现,Controller 用来控制用户的操作,View 用来控制呈现的内容,Model 用来表示处理的数据。
从控制器到视图
通常,在 Controller 中,我们定义多个 Action ,每个 Action 的返回类型一般是 ActionResult,在 Action 处理的最后,我们返回对于视图的调用。
代码如下:public ActionResult Index()
{
return this.View();
}
默认情况下,将会调用与 Action 同名的视图,比如,在上面的 Action 中,将会使用名为 Index 的视图。
如果我们传递了一个字符串参数,那么,这个字符串就回被视为视图的名称,例如,我们希望使用名为 IndexView 的视图进行呈现,那么,可以如下完成。
代码如下:public ActionResult Index()
{
return this.View("IndexView");
}
布局与视图
MVC 会直接去找我们的视图吗?不会!
从 Action 返回之后,首先,MVC 会在 Views 文件夹下查看是否存在一个名为 _ViewStart.cshtml 的特殊文件,如果存在的话,就回执行这个文件。
默认情况下,这个文件的内容如下所示:
代码如下:@{
Layout = "~/Views/Shared/_Layout.cshtml";
}
也就是说,它设置了我们的默认布局使用那一个文件文件。
布局等价于我们在 WebForm 中所使用的母版页。
如果没有这个文件,默认没有使用布局。
如果有了这个文件,而我们在页面中不想使用这个布局怎么办呢?很简单,在页面中设置 Layout = null 来覆盖掉它。
代码如下:@{
Layout = null;
}
布局中的分区
在布局页面中,默认就回存在一个特殊的指令 @RenderBody(),这是说,你在内容页面中呈现的内容,将会在这里进行输出。这就是在使用布局之后,你会发现你的视图中已经没有了 <html> 标记的原因。
代码如下:<body>
@RenderBody()
</body>
假如说,我们希望在布局中的多个位置进行输出,比如,样式表通常在 <head> 标记中,而现代的脚本则会出现在页面的最后,页面的内容当然出现在页面的主体中了。这样的话,我们在内容页面的实际内容,将会需要在布局的不同部分进行呈现,而不是在同一个位置进行呈现了。
解决的办法就是分区,实际上,类似于 WebForm 中的 ContentPlaceHolder ,定义一个命名的区域。
比如,下面我们定义了一个名为 scripts 的命名区域,第二个参数表示这个区域是可选的区域,在内容页面中可以不用提供内容。
新闻热点
疑难解答
图片精选