本文实例分析了ASP.NET MVC中的视图生成过程。分享给大家供大家参考。具体如下:
在 ASP.NET MVC 中,我们将前端的呈现划分为三个独立的部分来实现,Controller 用来控制用户的操作,View 用来控制呈现的内容,Model 用来表示处理的数据。
从控制器到视图
通常,在 Controller 中,我们定义多个 Action ,每个 Action 的返回类型一般是 ActionResult,在 Action 处理的最后,我们返回对于视图的调用。
public ActionResult Index() { return this.View(); }
public ActionResult Index() { return this.View("IndexView"); }
MVC 会直接去找我们的视图吗?不会!
从 Action 返回之后,首先,MVC 会在 Views 文件夹下查看是否存在一个名为 _ViewStart.cshtml 的特殊文件,如果存在的话,就回执行这个文件。
默认情况下,这个文件的内容如下所示:
@{ Layout = "~/Views/Shared/_Layout.cshtml"; }
@{ Layout = null; }
在布局页面中,默认就回存在一个特殊的指令 @RenderBody(),这是说,你在内容页面中呈现的内容,将会在这里进行输出。这就是在使用布局之后,你会发现你的视图中已经没有了 <html> 标记的原因。
<body> @RenderBody() </body>
<body> @RenderBody() @RenderSection("scripts", required: false) </body>
@section scripts{ <script type="text/javascript"> var i = 0; </script> }
如果我们的页面比较复杂,在同一个视图中定义输出的内容会导致页面非常复杂,通过将页面划分为多个比较独立的组成部分,可以将一个复杂的页面拆分为多个子部分来呈现。比如页面的标题部分,页面的菜单,页面的脚注部分等等。在 WebForm 中,解决这个问题的技术称为用户控件,在 MVC 中由两个技术来解决:分部视图和子Action。
先看分部视图,分部视图不依赖于 Action ,只能嵌入到其他独立视图中使用,你可以直接在视图文件夹中创建分部视图。
在使用分部视图的页面中,使用 RenderPartial 方法调用分部视图。
Html.RenderPartial("ProductSummary");
Html.RenderPartial("ProductSummary", p);
@{ Html.RenderPartial("ProductSummary", p); }
@Html.Partial("ProductSummary", p)
子 Action 问题
由于分布视图没有处理能力,只能继承主页面的数据进行呈现,如果需要有处理能力,怎么办呢?在 WebForm 中,我们可以使用 Server.Execute 来嵌入其它处理程序的输出内容,在 MVC 中,我们使用子 Action 来处理。
子 Action 就是用户不能直接访问,只能在其他的 Action 中访问的 Action 方法,它与普通的 Action 一样,有 Action 方法,还有这个 Action 对应的视图。
我们使用特性 ChildActionOnly 来说明这是一个子 Action。
[ChildActionOnly] public string Menu() { return "Hello, from NavController"; }
在其它视图中,可以使用 RenderAction 来访问子 Action,类似于 RenderPartial 方法,这个方法直接将内容输出到输出流中,由于它们的返回类型都是 void ,所以需要使用 @{} 来使用。
@{ Html.RenderAction("Menu", "Nav"); }
<!-- Action --> @Html.Action("Menu", "Nav")
希望本文所述对大家的asp.net程序设计有所帮助。
本文向大家介绍Android中常用的XML生成方法实例分析,包括了Android中常用的XML生成方法实例分析的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了Android中常用的XML生成方法。分享给大家供大家参考。具体如下: 1. java代码: 2. java ben: 3. 调用方法: 希望本文所述对大家的Android程序设计有所帮助。
本文向大家介绍ASP.Net页面生成饼图实例,包括了ASP.Net页面生成饼图实例的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了ASP.Net页面生成饼图的方法。分享给大家供大家参考。具体实现方法如下: 1.生成普通饼图: 运行效果如下图所示: 2.如果饼图要加边线,就将上面代码中加注释的代码部分取消注释,如下代码所示: 运行结果如下图: 希望本文所述对大家的asp.net程序设计有所帮
本文向大家介绍asp.net中生成饼状与柱状图实例,包括了asp.net中生成饼状与柱状图实例的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了asp.net中生成饼状与柱状图的实现方法。分享给大家供大家参考。具体方法如下: 一、生成图形的公共方法: 二、新建生成饼状柱状图页面BZImage.aspx: 后台: 三、显示饼状柱状图的页面: 前台: 希望本文所述对大家的asp.net程序设计有
本文向大家介绍PHP生成随机数的方法实例分析,包括了PHP生成随机数的方法实例分析的使用技巧和注意事项,需要的朋友参考一下 通常情况下,当我们要生成一个随机字符串时,总是先创建一个字符池,然后用一个循环和mt_rand()或rand()生成php随机数,从字符池中随机选取字符,最后拼凑出需要的长度。 这个php随机函数能生成XC*=z~7L这样的字符串,够随机!现在介绍另一种用PHP生成随机数的方
我试图自动生成刀的视图。我已经预先设置了配置: whitch为表生成dao,但不为视图生成dao。根据文件规定: 如果您使用的是jOOQ的代码生成器,那么可以将其配置为为为您生成POJO和DAO。然后,jOOQ为每个UpdateRecord生成一个DAO,即为每个表生成一个单列主键。 和 公共接口 它表示来自表或视图的记录-表记录其基础表或视图具有“主唯一键”,即主键或至少一个唯一键jOOQ使用“
本文向大家介绍Yii视图CGridView列表用法实例分析,包括了Yii视图CGridView列表用法实例分析的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了Yii视图CGridView列表用法。分享给大家供大家参考,具体如下: CGridView列表实例 修改基类,定义底部功能菜单framework/zii/widgets/grid/CGridView.php(152) 修改视图,实现底