学无止境

面朝大海,春暖花开

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

参考文章:http://www.cnblogs.com/haogj/archive/2010/12/01/1893955.html

 

1、_layout.cshtml公共模板。使用Html.Partial(“_header”),html.Partial(“_footer”)加载页头页脚,使用RenderBody加载内容。

2、
1、带有Render的方法返回值是void,在方法内部进行输出;不带的返回值类型为MvcHtmlString,所以只能这样使用:
@Html.Partial 对应 @{Html.RenderPartial(....);}
@Html.Action 对应 @{Html.RenderAction(....);}
2、Html.Partial可以直接提供用户控件名作为参数,而Html.Action需要有对应的Action,在Action内部返回PartailResult(即retun PartialView())。
3、对于简单的没有任何逻辑的用户控件,推荐使用Html.Partial;对于需要设置一些Model的用户控件,推荐使用Html.Action。当然,有Model数据也是可以使用Html.Partial方法的,可以看方法的重载。
4、使用Html.Action有个好处,就是可以根据不同的场景选择不同的用户控件。
比如:
@Html.Action("UserInfoControl")
在对应的UserInfoControl这个Action中,在用户未登录的时候,可以retun PartialView("LogOnUserControl");登录后,可以retun PartialView("UserInfoControl");

 

Html.Action和Html.RederAction来创建子视图   http://www.cnblogs.com/guanjie20/archive/2011/01/18/1938362.html

在ASP.NET MVC中,创建视图最典型的方式是调用一个action方法,它使用模型准备视图数据。action方法然后调用控制器的视图方法创建视图。然而,你可能想要调用不同的动作方法创建视图的不同部分。例如,可能你有一页面展现了最新新闻,天气和运动。在那种情况下,用三个动作方法是比较好的,一个动作方法处理新闻,另一个处理天气,还有一个处理运动。那样你可以在不同条件下呈现不同的视图,或者是将复杂的视图分解为小型的,更容易管理的片段。

这个主题描述了如何在创建多个视图分段(子视图)的一个视图(父视图)里调用多个动作方法。

1. 父视图和子视图
父视图是包含了调用返回子视图的动作方法的视图。父视图包含大部分用于呈现页面的HTML。子视图仅包含用于展示视图某部分的必须的标记。

例如,一个子视图创建一个列表,视图可能仅仅包含列表所需要的HTML,像下面的例子:

<ul>
  <li>Item 1</li>
  <li>Item 2</li>
  <li>Item 3</li>
</ul>

所有其它的标记(body, head等等)会在包含在父视图中。

2.调用Action和RenderAction辅助方法用于呈现子视图
ASP.NET MVC提供 HTML辅助方法(扩展方法)呈现大多数的 HTML元素,例如表单和链接,那种简化了例如像输入验证这样的公共任务。用于呈现子视图的两个 HTML辅助方法分别是:Aciton和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辅助方法返回字符串,必须要等号"="。

3.为辅助方法传递参数
你可以在父视图的不同位置调用相同的动作方法,通过参数传递决定要呈现什么。Action和 RenderAction两个方法都有方法重载接受一个包含了一对参数名和值的对象。下面的代码示例了RenderAction方法调用展示动作方法。在这种情况下,它传递一个包含在这部分呈现的子视图的名称值的匿名对象。标记呈现了一个“新闻”片段,接着是一个“天气”片段。

<% Html.RenderAction("Display", new { section = "News" }); %>
<% Html.RenderAction("Display", new { section = "Weather" }); %>

呈现动作方法看起来可能像下面的例子:

public ActionResult Display(string section)
{
    return View(section);
}

4.从其它控制器或区域调用动作方法
你可以调用不是当前控制器中的动作方法。要实现这样,你调用RenderAction的一个重载方法,指定动作方法和控制器的名称。下面的示例展示了调用SectionController类中的动作方法。第一个参数(字符串)是动作方法的名称,第二个参数(也是字符串)是控制器的名称。

<% Html.RenderAction("Display", "Section"); %>

如果你需要的动作方法在其它的区域中,你可以在对象中传递区域名称,如下:

<% Html.RenderAction("Display", new { area = "Navigation" }); %>

通过使用RenderAction不同的重载方法,你就可以在不同的区域调用不同的控制器。

原文地址:http://msdn.microsoft.com/en-us/library/ee839451(v=VS.100).aspx

posted on 2012-01-30 17:35  学+无止境  阅读(3492)  评论(0编辑  收藏  举报