在 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> 标记中,而现代的脚本则会出现在页面的最后,页面的内容当然出现在页面的主体中了。这样的话,我们在内容页面的实际内容,将会需要在布局的不同部分进行呈现,而不是在同一个位置进行呈现了 www.yztrans.com
 
   解决的办法就是分区,实际上,类似于 WebForm 中的 ContentPlaceHolder ,定义一个命名的区域。
 
   比如,下面我们定义了一个名为 scripts 的命名区域,第二个参数表示这个区域是可选的区域,在内容页面中可以不用提供内容。
 
   <body>
 
   @RenderBody()
 
   @RenderSection("scripts", required: false)
 
   </body>
 
   而在我们的内容视图中,默认所有的内容都是填充到布局页面中的 RenderBody 部分。
 
   如果不是的话,就可以在内容页面中,通过 @section 区域名称{ } 的方式来定义准备输出到对应区域中的内容了。
 
   @section scripts{
 
   <script type="text/javascript">
 
   var i = 0;
 
   </script>
 
   }
 
   分部视图
 
   如果我们的页面比较复杂,在同一个视图中定义输出的内容会导致页面非常复杂,通过将页面划分为多个比较独立的组成部分,可以将一个复杂的页面拆分为多个子部分来呈现。比如页面的标题部分,页面的菜单,页面的脚注部分等等。在 WebForm 中,解决这个问题的技术称为用户控件,在 MVC 中由两个技术来解决:分部视图和子 Action www.wx-jr.com
 
   先看分部视图,分部视图不依赖于 Action ,只能嵌入到其他独立视图中使用,你可以直接在视图文件夹中创建分部视图。
 
   在使用分部视图的页面中,使用 RenderPartial 方法调用分部视图。
 
   Html.RenderPartial("ProductSummary");
 
   分部视图与主视图共享所有的数据,比如模型,ViewData,ViewBag 等等,这些数据可以直接在分部视图中使用。
 
   如果希望分部视图使用不同的模型对象,简化分部视图中的数据复杂度,也可以直接传递一个模型对象过去。
 
   Html.RenderPartial("ProductSummary", p);
 
   这里的第二个参数,将会在分部视图中当在模型对象来使用。
 
   需要注意的是 RenderPartial 方法的返回类型是 void,它会将输出的内容直接输出到回应的输出流中。所以在使用上面语句的时候,不能直接嵌入到页面中,需要放在一个 @ { } 语句中,如下所示。
 
   @{
 
   Html.RenderPartial("ProductSummary", p);
 
   }
 
   如果你不喜欢这样的语法,而希望直接嵌入到页面中,也可以使用 Html.Partial 方法来呈现,区别是这个方法返回呈现的 Html 片段,而不是直接输出到输出流中。
 
   @Html.Partial("ProductSummary", p)
 
   子 Action 问题
 
   由于分布视图没有处理能力,只能继承主页面的数据进行呈现,如果需要有处理能力,怎么办呢?在 WebForm 中,我们可以使用 Server.Execute 来嵌入其它处理程序的输出内容,在 MVC 中,我们使用子 Action 来处理雅思答案 www.tygj123.com
 
   子 Action 就是用户不能直接访问,只能在其他的 Action 中访问的 Action 方法,它与普通的 Action 一样,有 Action 方法,还有这个 Action 对应的视图。
 
   我们使用特性 ChildActionOnly 来说明这是一个子 Action.
 
   [ChildActionOnly]
 
   public string Menu()
 
   {
 
   return "Hello, from NavController";
 
   }
 
   如果用户直接请求这个子 Action ,那么,系统会返回一个错误信息。
 
   操作"menu"只能由子请求访问。
 
   在其它视图中,可以使用 RenderAction 来访问子 Action,类似于 RenderPartial 方法,这个方法直接将内容输出到输出流中,由于它们的返回类型都是 void ,所以需要使用 @{} 来使用。
 
   @{ Html.RenderAction("Menu", "Nav"); }
 
   同样,使用 Action 则可以直接返回一个 Html 片段,就不用使用一个 @{ } 了。
 
   <!-- Action -->
 
   @Html.Action("Menu", "Nav")

关于ASP.NET MVC中的视图生成的更多相关文章

  1. ASP.NET MVC 中的视图生成

    关于 ASP.NET MVC 中的视图生成 在 ASP.NET MVC 中,我们将前端的呈现划分为三个独立的部分来实现,Controller 用来控制用户的操作,View 用来控制呈现的内容,Mode ...

  2. 关于 ASP.NET MVC 中的视图生成

    在 ASP.NET MVC 中,我们将前端的呈现划分为三个独立的部分来实现,Controller 用来控制用户的操作,View 用来控制呈现的内容,Model 用来表示处理的数据. 从控制器到视图 通 ...

  3. asp.net -mvc框架复习(5)-ASP.NET MVC中的视图简单使用

    1.视图分类 ASPX视图(现在讲解) Razor视图(后面讲解) ASPX 视图: 2.@page指令 作用:页面的声明 要求:必须放在第一行,常用指令属性如下: 3.服务器端内嵌语法 小脚本:在A ...

  4. Asp.net Mvc中分部视图获取后台数据并展示

    方式一: 1.主页面中代码: @{Html.RenderAction("CreateLeftMenu");} 2.Controller中代码: public PartialView ...

  5. ASP.NET MVC中使用highcharts 生成简单的折线图

        直接上步骤:   生成一个options,选项包含了一些基本的配置,如标题,坐标刻度,serial等: 配置X轴显示的Category数据,为一个数组: 配置Y轴显示的数据,也为一个数据: 用 ...

  6. 007.Adding a view to an ASP.NET Core MVC app -- 【在asp.net core mvc中添加视图】

    Adding a view to an ASP.NET Core MVC app 在asp.net core mvc中添加视图 2017-3-4 7 分钟阅读时长 本文内容 1.Changing vi ...

  7. asp.net mvc 中的部分视图

    使用方法:@Html.Action(action, controller)加载局部页面.例如在模板页中使用:@Html.Action("Contact", "Compan ...

  8. 分部视图在ASP.NET MVC中的应用

    概述: 在ASP.NET Web Form的开发经验中,对于User Control使用比较频繁,可以减少重复的代码,利于页面模块化,这个概念也被引入了ASP.NET MVC.即“分部视图”. 1.创 ...

  9. 如何应用ASP.NET MVC中的分部视图

    概述: 在ASP.NET Web Form的开发经验中,对于User Control使用比较频繁,可以减少重复的代码,利于页面模块化,这个概念也被引入了ASP.NET MVC.即“分部视图”. 1.创 ...

随机推荐

  1. Subway POJ 2502

    题目链接: http://poj.org/problem?id=2502 题目大意: 你刚从一个安静的小镇搬到一个吵闹的大城市,所以你不能再骑自行车去上学了,只能乘坐地铁或者步行去上学.因为你不想迟到 ...

  2. Post/Redirect/Get pattern | PRG 模式

    Post/Redirect/Get 是一种 web 开发设计模式,用于防止表单的重复提交. 默认情况,提交 Post 请求到服务器后,如果直接刷新浏览器,会重新在提交一次 Post 请求.在访问电商网 ...

  3. Google 2013 campus test-R1

    Reading Phone Number #include<iostream> #include<fstream> #include<vector> #includ ...

  4. Android Studio 首次安装报错 Java.lang.RuntimeException:java.lang.NullPointerException...错

    下次安装报:Java.lang.RuntimeException: java.lang.NullPointerException......错 只需在文件..\Android Studio\bin\i ...

  5. 红领的短板:线下“O”瓶颈_财经频道_一财网

    红领的短板:线下"O"瓶颈_财经频道_一财网 红领的短板:线下"O"瓶颈

  6. js打开新的链接下载文件

    var p =params.join("&"); var a = document.createElement('a'); a.href = 'report/exportp ...

  7. linux下为用户添加sudo命令功能

    为用户添加sudo命令功能: 打开etc下的sudoers文件 vi /etc/sudoers 在 root   ALL=(ALL)  ALL 下面添加如下一行,然后保存关闭 hadoop  ALL= ...

  8. 有趣的js符号{}、[]、""、~、++等转换

    (!(~+[])+{})[--[~+""][+[]]*[~+[]] + ~~!+[]]+({}+[])[[~!+[]]*~+[]] http://www.jointforce.co ...

  9. angularjs 创建自定义的指令

    创建自定义的指令 除了 AngularJS 内置的指令外,我们还可以创建自定义指令. 你可以使用 .directive 函数来添加自定义的指令. 要调用自定义指令,HTMl 元素上需要添加自定义指令名 ...

  10. 深入分析C++引用

    Normal 0 7.8 磅 0 2 false false false EN-US ZH-CN X-NONE MicrosoftInternetExplorer4 关于引用和指针的差别的文章非常多非 ...