您好,欢迎来到刀刀网。
搜索
您的当前位置:首页第4讲:MVC中的View层使用技巧(下讲)

第4讲:MVC中的View层使用技巧(下讲)

来源:刀刀网
第4讲:MVC中的View层使用技巧(下讲) 2010.9.4 苏鹏

内容介绍

-HtmlHelper类

-ViewEngine引擎深入介绍

预备知识

-安装Visual Studio 2010 Express -了解ASP.Net -了解设计模式基本概念

Html.ActionLink和Html.RouteLine

-这两个控件都根据用户输入生成导航信息 -ActionLink根据生成调用另外Controller的链接

指定导航的Action

指定导航的Controller和Action

指定Action访问的参数

指定其它参数

RouteLink

Html.BeginForm

-这一标记完全模拟

标记

BeginForm标记与其他的HtmlHelper标记略有不同,其它的HtmlHelper标记是单个出现的,而BeginForm标记是成对出现的,它完整模仿了html当中使用的

。 第一种方式

第二种方式(推荐)

Html.Hidden

-用于生成隐藏文本

Html.DropDownList和Html.ListBox

-用于显示列表或选择值 -用于用户的输入

强类型支持

Html.PassWord

-Password的工作方式和textbox一样,只是提交以后数据会自动清空

(纠正:上图中的input控件的id属性的值应该是my_upwd)

Html.RadioButton

-生成一组选择值,并要求用户选择其一

Html.Partial和Html.RenderPartial

-用于输出局部html片段

它有四种重载

使用方式

注意:

RenderPartial由于是直接Response.Write输出,所以<%%>不需要冒号 Partial是转义之后的,需要编译一下,所以<%:%>有冒号

RenderPartial和Partial的本质上是一致的,不同之处是RenderPartial是直接输出Html的,Partial也是输出Html,但是它中间有个转义。RenderPartial在使用过程中,实际上是使用Response.Write方式直接往页面输出,它的性能在大型访问时会比Partial好很多,所以很多情况下我们会使用它来做相应的输出。

Html.Action和Html.RenderAction

-用于实现指定Controller的指定Action调用

在Controller里面有若干个函数,这些函数称为Action。它们的特点是,每一个Controller中的Action一般都返回ResultAction的结果。而ResultAction会作为View放到View层当中去,它们的关系大致是这样。但是有些情况下我们希望只输出或调用指定的Action,我们就使用

Html.Action这种方法。我们刚刚介绍的Partial是把View当中的数据输出成文件,那么Action和RenderAction就是执行的Controller中的一个Action,并把结果返回出来。Action提供大量可扩展方法用于实现,因为每个ChildAction里面都可能会有一些Model数据,每个的Controller就可以被混合调用。

默认情况下,我们在返回的View中View一定是从某一个固定的Controller拿到的数据,很难在一个View中获得多个Controller的数据,因为Route不允许这么做。例如,Home文件夹下的View只能从HomeController中拿数据,如果想在HomeController和AccountController

中拿数据,这样就比较困难,而Html.Action就是专门为解决这个问题而来的。如果在Action上面声明一个Attribute的属性,叫ChildAction,那么在View调用的时候,就可以使用Html.Action把这个Action输出。

其他Controller的View调用MyController的Action

需要注意的是,一旦Action标记为ChildAction,它就不能被Url直接引用。还有一点,Controller里面有个Context控件上下文,它可以判定某个Action是不是ChildAction,如果是,这个Action就不能加其它标签,例如授权。如果一个Action是ChildAction,它就能在任意页面被引用,从而这种情况下不能再对它进行授权,这个逻辑也很容易理解。

另外一个是不能使用OutputCache进行设定,OutputCache一旦缓存之后,在不同页面调用这个ChildAction时系统就不知道该使用哪个实例了。

RenderAction -传递参数

由于上面已经有一个Action名叫Menu并且是无参数的方法,所以下面的Menu重载不会被View识别

正确的方法是加一个ActionName标签

这样暴露给外面的Action名称就不在是Menu而是coolmenu,避免重载的同名问题

(纠正:这个调用的ActionName应该传入coolmenu而不是Menu,调用的方法应该是Html.RenderAction)

Html.TextArea

-用于生成