1. @Html.ActionLink("该链接要显示的文字A","对应的控制器方法B");会生成:<a href="C/B">A</a> 默认控制器为当前页面的控制器 2.@Html.ActionLink("该链接要显示的文字A","对应的控制器方法B","指定了控制器名称C");会生成:<a href='C/B'>A</a> 3.@Html.ActionLink("该链接要显示的文字A","对应的控制器方法B",new{id=1});会生成:<a href ='C/B/1'>A</a> 4.@Html.ActionLink("该链接要显示的文字A","对应的控制器方法B",new{id=1},new {target='_blank'}); 会生成:<a href="C/B/1" target="_blank">A</a> 假如写成:new{target='_blank',class="className"}要报错 因为class是关键字,应该写成:@class="className"。 5.@Html.ActionLink("该链接要显示的文字A","对应的控制器方法B","对应的控制器C","routeValues 传的 new{id=1}","htmlAttrib @class='className'");包含了所有的类型参数
Razor模板引擎 @RenderBody ,@RenderPage
1.@RenderBody()
当创建基于Layout.cshtml布局页面的视图时候,视图的内容跟布局页面合并。而创建的新视图内容会通过Layout.cshtml布局页面的@RenderBody()方法呈现在标签之间
2.@RenderPage()
这个方法是要呈现一个页面,比如网页中固定头部的可以单独放在一个共享的视图文件里,然后在布局页面通过这个方法调用:
@RenderPage("~/Views/Shared/Err.cshtml");
带参数:@RenderPage(~/Views/Shared/Err.cshtml",new{id=0,name="ing"});
获取RenderPage()传递过来的参数:@PageData["param"]
3.RenderSection()
布局页面还有节Section的概念,如果某个视图模板中定义了一个节,那么久可以把它单独呈现出来,为了防止缺失节而出现异常,可以给RenderSection()提供俩个参数。
@RenderSection("head",false);
或
@if(IsSectionDefined("head"))
{
@RenderSection("head",false);
}else{
<p>No</p>
}
<link href="@Url.Content("~/Content/Site.css")" rel="stylesheet" type="text/css" /> <script src="@Url.Content("~/Scripts/jquery-1.4.4.min.js")" type="text/javascript"></script> @RenderSection("head", required: true)@*View页面自定义特定js/css使用*@ <body> @RenderPage("~/Views/Shared/_Header.cshtml") @RenderBody() </body>
4.@Html.Partial
每次创建自己的TextWriter实例并且把内容缓存在内存里面,最后把所有Writer输出的内容发送到一个MvcString中
经常用@{Html.RenderPartial("A");}而不是@Html.Partial
Html.RenderPartial()跟@Html.Partial的区别:
Html.RenderPartial直接输出到当前HttpContext(因为是直接输出所以性能好)
Html.Partial将视图内容直接生成一个字符串并返还(相当于有个转义的过程)
RenderPage()和RenderPartial()的区别:
RenderPage()调用的页面只能使用其传递过去的数据
RenderPartial()是可以使用ViewData,Model等数据的
如:@{Html.RenderPartial("A",model);}用这个重载可以在部分视图使用强类型,然后在主视图使用第二个参数传model过去 @{Html.RenderPartial("A"ViewData["B"]);}
Html.RenderPartial和Html.RenderAction的区别:
Html.RenderPartial适合用在重复的UserControl,并且只需要透过Model来呈现内容,或者对于广告的UserControl也合适用。
Html.RenderAction则会先去呼叫Controller的Action方法,如果UserControl是需要透过资料库(Action)取得信息来呈现,此时就比较合适使用此方法
注:
1.带有Render的方法返回值都是void,在方法内部进行输出,不带返回值类型为MvcHtmlString 例:
@Html.Partial对应@{Html.RenderPartial(xxx);}
@Html.Action对应@{Html.RenderAction(xxx);}
2.Html.Partial可以直接提供用户控件名作为参数,而Html.Action需要对应的Action,在Action内部返回PartailResult(即return PartialView()).
3.对于简单没有任何逻辑的用户控件 推荐用Html.Partial;对于需要设置一些Model的用户控件,用Html.Action。当然 ,有Model数据也是可以用Html.Partial方法的,可以看方法的重载
4.使用Html.Action有个好处:可以根据不通过的场景选择不通的用户控件:
@Html.Action("AControl")
在对应的A这个Action中,在用户没有登录的时候,可以用return PartialView("BControl");登录后,可以 return PartialView("AControl");