• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

asp.netMVC4.0View回顾——布局页与分部页

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

asp.net MVC 4.0中总结 视图里加载部分视图几种方法

@RenderPage()

但它不能使用 原来视图的 Model 和 ViewData ,只能通过参数来传递。

1 @RenderPage("~/Shared/Component/Dialog.cshtml", new { title = "Hello world!", content="Nani" })

 分部视图接收数据通过Page

1 <div id="dialog" title="@Page.title" style="display: none;">
2     <p>
3         @Page.title
4     </p>
5 </div>

 

@Html.Partial()

用于将分部视图渲染为字符串

@Html.Partial("_PartialPage1",model,ViewData)直接返回MvcHtmlString填充

1 @Html.Partial("Component/Dialog", null, new ViewDataDictionary { { "title", "Hello world!" }, { "content", "Nani?" } })

Razor子视图里使用 ViewBag 来获取传递的数据

1 <div id="dialog" title="@ViewBag.title" style="display: none;">
2     <p>
3         @ViewBag.content
4     </p>
5 </div>

 传递强类型到部分视图

1 @{
2  var args = new Dictionary<string,string>();
3  args["redirectController"] = "Admin";
4  args["redirectAction"] = "User";
5 }
6 @Html.Partial("_childPartial",args)

_childPartial.cshtml

1 @model Dictionary<string,string>
2 <div>@Model["redirectController"]</div>
3 <div>@Model["redirectAction"]</div>

 

@RenderPartial()

将分布视图直接写入响应输出流,所以只能直接放在代码块中,不能放在表达式中(返回值是void)

RenderPartial 不需要创建 Controller 的 Action ,而 RenderAction 需要在 Controller 创建要加载的 Action。RenderAction 会先去调用 Contorller 的 Action ,最后再 呈现视图,所以这里 页面会在 发起一个链接。如果这个部分视图只是一些简单 的 html 代码,请使用 RenderPartial。 但如果这个部分视图 除了有 html 代码外,还需要 通过 读取数据库里的数据 来渲染,就必须使用 RenderAction 了,因为 它可以在 Action 里调用 Model里的 法读取数据库,渲染视图后在呈现,而 RenderPartial 没有 Action,所以无法做到。

Partial 可以直接输出内容,它内部是 将 html 内容转换为 string 字符(MVCHtmlString),然后缓存起来,      最后在一次性输出到页面。显然,这个转换的过程,会降低效率,所以通常使用 RenderPartial 代替。


@Html.Action()

实体类

 1 public class Menu
 2 {
 3     public List<MenuItem> Items { get; set; }
 4 }
 5 
 6 public class MenuItem
 7 {
 8     public string Text { get; set; }
 9     public string Url { get; set; }
10 }

控制器

 1 public ActionResult MyMenu()
 2 {
 3    MvcLearn.Models.Menu m = new MvcLearn.Models.Menu();
 4    List<MvcLearn.Models.MenuItem> items = new List<MenuItem>();
 5    items.Add( new MenuItem(){ Text = "Baidu", Url = "http://www.baidu.com"});
 6    items.Add(new MenuItem() { Text = "Sina", Url = "http://www.Sina.com" });
 7    items.Add(new MenuItem() { Text = "IBM", Url = "http://www.ibm.com" });
 8    items.Add(new MenuItem() { Text = "Sohu", Url = "http://www.sohu.com" });
 9    m.Items = items;
10    return PartialView(m);
11 }

建立一个PartialView - MyMenu.cshtml

1 @model MvcLearn.Models.Menu  
2 <ul>  
3 @foreach(var item in Model.Items)  
4 {  
5     <li><a href="@item.Url">@item.Text</a></li>  
6 }  
7 </ul> 

在页面中调用该Action生成视图:

 1 @Html.Action("MyMenu") 

调用Action时传入参数

1 @Html.Action("MyMenu", new { mi= new MvcLearn.Models.MenuItem(){ Text = "haha", Url =<a href="http://www.ms.com">http://www.ms.com</a>}})


@Html.RenderAction()

 1 @{Html.RenderAction("MyMenu")} 

Action 也是直接输出,和 Partial 一样,也存在一个转换的过程。不如 RenderAction 直接输出到 当前HttpContext 的效率高。

 


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
asp.net调试,Web服务器被配置为不列出此目录的内容。发布时间:2022-07-10
下一篇:
[ASP.NET笔记]6.导航控件发布时间:2022-07-10
热门推荐
热门话题
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap