ASP.NET MVC 动态选择VIEW
若要在 ASP.NET MVC 中创建视图,通常是调用一个使用模型来准备视图数据的操作方法。 然后,该操作方法调用控制器的 View 方法来创建视图。 但是,您可能要调用不同的操作方法来创建视图的不同部分。 例如,假定有一个网页要显示最新新闻、天气和体育资讯。 在这种情况下,可能需要一个操作方法来处理新闻,一个处理天气,另一个则处理体育资讯。 这样,您就可以在不同的条件下呈现不同的视图,或将复杂的视图分解成若干个更小、更易于管理的小块。
本主题描述了如何从创建视图的子部分(子视图)的视图(父视图)中调用操作方法。
父视图和子视图
父视图是一个包含对返回子视图的操作方法的调用的视图。 父视图包含所呈现的页的大多数 HTML。 子视图只包含视图的一个部分所需的标记。
例如,创建列表的子视图可能只包含列表的 HTML,如以下示例所示:
<ul><li>Item 1</li><li>Item 2</li><li>Item 3</li> </ul>
所有其他标记(正文、标题等)都将包含在父视图中。
调用操作和用于呈现子视图的 RenderAction 帮助器方法
ASP.NET MVC 提供了 HTML 帮助器方法(扩展方法),这些方法可呈现大多数类型的 HTML 元素(例如窗体和链接),并简化了一些常规任务(如输入验证)。 用于呈现子视图的 HTML 帮助器有两个:Action 和 RenderAction。 这些 HTML 帮助器位于 ChildActionExtensions 类中。
Action 方法将子视图以字符串的形式返回,然后可以直接呈现它。 RenderAction 方法就地呈现子视图。
例如,假设您有一个名为 ChildList 的子视图,它由上一节中显示的 HTML 组成。 控制器包含以下用于呈现子视图的操作方法:
public ActionResult ChildList() {return View(); }
请注意,在控制器中,没有用于呈现父视图或子视图的特定方法。 您首先呈现父视图,父视图然后呈现所需的子视图。
若要调用操作方法并在父视图中呈现子视图,既可以使用 Action 帮助器方法,也可以使用 RenderAction 帮助器方法,如以下示例中所示:
// One alternative (renders a string) <%= Html.Action("ChildList") %>//Another alternative (renders in place) <% Html.RenderAction("ChildList"); %>
请注意,由于 Html.Action 帮助器方法返回一个字符串,所以等号 (=) 是必需的。
将参数传递给帮助器方法
可以从父视图中的多个地方调用相同的操作方法,并向其传递参数以指定要呈现的内容。 Action 和 RenderAction 都具有接受一个对象的方法重载,该对象包含参数名称和值对。 下面的示例演示了调用 Display 操作方法的 RenderAction 方法的标记。 在这种情况下,此标记传递包含子视图的名称的值的匿名对象,以便呈现相应的部分。 此标记呈现一个“news”部分并紧随其后呈现“weather”部分。
<% Html.RenderAction("Display", new { section = "News" }); %> <% Html.RenderAction("Display", new { section = "Weather" }); %>
Display 操作方法可能与下面的示例类似:
public ActionResult Display(string section) {return View(section); }
从其他的控制器或区域调用操作方法
可以调用位于除当前控制器以外的控制器中的操作方法。 若要执行此操作,可调用 RenderAction 方法的重载,此方法允许您指定要使用的操作方法和控制器的名称。下面的示例演示了调用 SectionController 类的 Display 操作方法的标记。 第一个参数(字符串)是操作方法的名称,第二个参数(也是字符串)是控制器的名称。
<% Html.RenderAction("Display", "Section"); %>
如果您需要的操作方法位于其他区域中,则可以如下所示在一个对象中传递该区域名称:
<% Html.RenderAction("Display", new { area = "Navigation" }); %>
通过使用 RenderAction 方法的不同重载,还可调用不同区域中的不同控制器。
因为MSDN的文章标题不够直接所以内容没有变,只是改了一下标题方便大家查询:
转自:http://msdn.microsoft.com/zh-cn/library/ee839451.aspx
转载于:https://www.cnblogs.com/jiguixin/archive/2010/12/29/1921074.html
ASP.NET MVC 动态选择VIEW相关推荐
- ASP.NET MVC动态加载数据
ASP.NET MVC动态加载数据,一般的做法是使用$.each方法来循环产生tabel: 你可以在html时先写下非动态的部分: <table><tr><th styl ...
- ASP.NET MVC动态二级域名及DNS(泛解析配置)
动态二级域名的实现: 应用场景:目前产品要实现SaaS功能,因为工作需要实现二级域名:www.{CompanyUrl}.xxx.com 假设产品主域名入口为:www.xxx.com 当a公司租户登录时 ...
- asp.net mvc(十一)自定义view engine
当创建一个asp.net mvc 1.0的项目后,在web工程中都会出现Views文件夹,这里面就是我们存放View Page或者是partial view的地方.而且系统对于Controller的名 ...
- asp.net mvc 如何在View中获取Url参数的值
如果url是 /home/index?id=3 直接Request就ok. 但是如果路由设定为:{controller}/{action}/{id} url是 /home/index/3 这时想 ...
- 七天学会ASP.NET MVC (二)——ASP.NET MVC 数据传递
通过第一天的学习之后,我们相信您已经对MVC有一些基本了解. 本节所讲的内容是在上节的基础之上,因此需要确保您是否掌握了上一节的内容.本章的目标是在今天学习结束时利用最佳实践解决方案创建一个小型的MV ...
- Java进击C#——应用开发之Asp.net MVC
本章简言 上一章笔者讲到关于Asp.NET的知识点.了解Asp.NET基本的知识点之后,我们在来学习关于C#的MVC框架就简单多了.显然本章就是来介绍一下关于Asp.NET MVC.对于MVC的思想笔 ...
- 七天来学习ASP.NET MVC (两)——ASP.NET MVC 数据传输
通过第一天的学习之后,我们相信您已经对MVC有一些基本了解. 本节所讲的内容是在上节的基础之上.因此须要确保您是否掌握了上一节的内容. 本章的目标是在今天学习结束时利用最佳实践解决方式创建一个小型的M ...
- ASP.NET - MVC框架及搭建教程
一.MVC简介 MVC:Model-View-Controller(模型-视图-控制器),MVC是一种软件开发架构模式. 1.模型(Model) 模型对象是实现应用程序数据域逻辑的应用程序部件. 通常 ...
- ASP.NET MVC 教程学习
1. Why :为什么需要ASP.NET MVC 本章主要为大家汇总了为什么学习Asp.net MVC替代WebForms,产生ASP.NET MVC 的需求是什么,只有更好的理解了为什么需要MVC, ...
最新文章
- HQL中的Like查询需要注意的地方
- php取当前是pc还是手机号,利用PHP判断是手机移动端还是PC端访问的函数示例
- 基于机器学习的web异常检测
- combineLatest 使用的一个陷阱和基于 debounceTime 的解决方案
- 重载与重写(overload and override)
- python数据驱动测试_python数据驱动--Excel维护测试用例
- Linux下qwt源码编译,QWT的编译与配置
- 乱码 设置界面_三星手机系统爆出BUG!有用户反映手机黑屏、乱码、无限重启...
- 阿里表结构设计mysql_阿里华为P8级架构师教你MySQL数据库设计三范式与反范式
- AC自动机算法概述及习题
- js去掉字符串的空格
- toolchain - 工具链
- 概述无线传感网的MAC协议
- stm32f407+rtthread 使用 ec20 ppp拨号
- 服务器芯片市场容量,未来内存接口芯片市场规模 使用内存接口芯片的服务器内存模组主要有寄存内存模组(RDIMM)和减载内存模组(LRDIMM)两种。RDIMM需要一颗寄... - 雪球...
- 跨站脚本(XSS)漏洞
- DIY一个测量心率装置
- 爬虫实战 | 手把手用Python教你采集可视化知乎问题的回答(内附代码)
- 古代玻璃制品的化学成分分析与鉴别
- 【CCF会议期刊推荐】中国计算机协会(CCF)推荐计算领域高质量科技期刊分级目录(T2类)