@Html.Partial,@Html.Action,@Html.RenderPartial,@Html.RenderAction [转]

@Html.Action:需要有对应的Action,并且Action方法有返回值。(注:处理完业务逻辑同时,也需要返回所需值)

@{Html.RenderAction}:需要有对应的Action,Action方法没有返回值。(注:只处理业务逻辑,不需要返回值)

@Html.Partial:    不需要有Action,直接取ViewName对应的页面内容,有返回值。回传的一个Object (MvcHtmlString), 回传一个String 把一堆Html给回传出来, 然后写进到主页面上;(注:Patial的数据来自于调用的View)

@{Html.RenderPartial}:    不需要有Action,直接获取ViewName对应的页面内容,没有返回值。回传的是void, 而这个方法会在主页面上添加指定的View;(注:RenderPatial的数据来自于调用的View)

**********************************************************************************

@Html.Partial/@{Htmt.RenderPartial()}

@Html.Partial用于将分部视图渲染为字符串

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

RenderPartial因为是直接写在响应流中,所以性能会更好(微量影响),而Partial不用写在代码块中,所以更方便

@Html.Action()/@Html.RenderAction()

和Partial与RenderPartial类似,但是因为会通过Action,所以更灵活,可以利用控制器上下文。

在Action中可以通过IsChildAction来判断是被Url直接调用还是被Action()/RenderAction()调用

可以利用重载直接参数给Action。

RenderAction优先使用ActionNameAttribute。

Action中使用return PartialView()指定分部视图,在_ViewStatrt.cshtml中指定的Layout会无效。

***********************************************************************************

Html.RenderPartial与Html.RenderAction这两个方法都是用来在界面上嵌入用户控件的。

Html.RenderPartial是直接将用户控件嵌入到界面上:

<%Html.RenderPartial("LogOnUserControl");%>或
<%Html.RenderPartial("~/Areas/Comm/Views/Shared/LogOnUserControl.ascx");%>

注意:用第一种方法时,用户控件必须放在调用者同一目录下,也可以放在View/Shared中。

RenderPartial和RenderAction两者的相同点

通常都被用来显示一个功能相对独立的“块”,比如说显示菜单或者导航条。 两者输出的结果都被作为调用的View的一部分显示。

两者的不同点

  1. RenderPatial的数据来自于调用的View,而RenderAction来自自己。
  2. RenderAction会发起一个新的Request,而RenderPatial不会。

Html.RenderAction是通过Controller中的Action来调用MVC用户控件

这个方法RenderPartial有点不一样,他是直接重新执行一次Controller → Model → View的顺序,然后把产生的页面带回到原来的View中再回传。

Html.RenderAction中传递的参数是执行的Controller和Action名称。若是在控制器中的某个方法只能让Html.RenderAction()调用时,可以在方法上添加特性[ChildActionOnly],其它的地方无法访问。ChildActionOnly的目的主要就是让这个Action不通过直接在地址栏输入地址来访问,而是需要通过RenderAction来调用它;

ActionName的意思就是为Action定义一个新的名称

[ActionName("NewTest")] 这样修改后,那么调用的时候就不是Test了,而是NewTest;

public class ChildActionOnlyTestController : Controller
{
 [ChildActionOnly]//防止直接调用 public ActionResult GetSupplierList()
 {
  var controller = new SupplierController();
  return controller.SupplierList();
 }
}

以下是执行过程比较图

一个示例:
Controller:

//文章菜单列表
[ChildActionOnly]
public ActionResult ArticleMenu()
{
 var item = _db.Classes.ToList();
  return PartialView(item);
}

View:Articlemenu.cshtml

@model IEnumerable<Class>
@foreach (var item in Model)
{
 @Html.ActionLink(item.ClassName,item.ActionName, "Article", null, new { @class = "tree_children", @target = "MainFrame" })
}

Add View:Index.cshtml

@{Html.RenderAction("ArticleMenu", "Article");}

第二个示例:
Controller: 注意PartialView里加载的是部分视图并不是model

[ChildActionOnly]
public ActionResult CartSummary()
{
var cart = ShoppingCart.GetCart(this.HttpContext);
ViewData["CartCount"] = cart.GetCount();
 return PartialView("CartSummary");
}

PartiaView:CartSummary.cshtml

@Html.ActionLink("Cart (" + ViewData["CartCount"] + ")",
    "Index",
    "ShoppingCart",
    new { id = "cart-status" })

Add View:

@{Html.RenderAction("GenreMenu", "Store");}

对这四个的区别做一个总结,清理一下思路,方便以后使用:

1、带有Render的方法返回值是void,在方法内部进行输出;不带的返回值类型为MvcHtmlString,所以只能这样使用:
    @Html.Partial 对应 @{Html.RenderPartial(....);}
    @Html.Action 对应 @{Html.RenderAction(....);}

2、Action、RenderAction加载方法的视图,执行Controller → Model → View的顺序,然后把产生的页面带回到原来的View中再回传。而Partial、RenderPartial直接加载视图文件内容

3.  Html.Partial可以直接提供用户控件名作为参数,而Html.Action需要有对应的Action,在Action内部返回PartailResult(即retun PartialView())。

4、对于简单的没有任何逻辑的用户控件,推荐使用Html.Partial;对于需要设置一些Model的用户控件,推荐使用Html.Action。当然,有Model数据也是可以使用Html.Partial方法的,可以看方法的重载。

5、使用Html.Action有个好处,就是可以根据不同的场景选择不同的用户控件。比如:
@Html.Action("UserInfoControl")
在对应的UserInfoControl这个Action中,在用户未登录的时候,可以retun PartialView("LogOnUserControl");登录后,可以retun PartialView("UserInfoControl");

区别总结

转:http://www.cnblogs.com/firstcsharp/p/3142091.html

http://www.cnblogs.com/gesenkof99/archive/2013/06/03/3115052.html

时间: 2025-01-02 05:05:20

@Html.Partial,@Html.Action,@Html.RenderPartial,@Html.RenderAction [转]的相关文章

asp.net mvc @Html.Partial @Html.Action @Html.RenderPartial @Html.RenderAction区别

转载自 :  <asp.net mvc @Html.Partial @Html.Action @Html.RenderPartial @Html.RenderAction区别> 先复制过来.. 带Render的方法返回值是void,在方法内部进行输出:不带Render的返回值类型为MvcHtmlString,是一个字符串. Partial和RenderPartial:直接加载视图文件内容:Action和RenderAction:重新执行一次Controller→Model→View的顺序,然后

@Html.Partial,@Html.Action,@Html.RenderPartial,@Html.RenderAction区别 .(转)

mvc renderaction   renderpartial  杂谈      Html.RenderPartial与Html.RenderAction这两个方法都是用来在界面上嵌入用户控件的.      Html.RenderPartial是直接将用户控件嵌入到界面上:     <%Html.RenderPartial("LogOnUserControl");%> 或     <%Html.RenderPartial("~/Areas/Comm/Vie

@Html.Partial,@Html.Action,@Html.RenderPartial,@Html.RenderAction区别

ASP.NET MVC 中@Html.Partial,@Html.Action,@Html.RenderPartial,@Html.RenderAction区别 对这四个的区别做一个总结,清理一下思路,方便以后使用: 1.带有Render的方法返回值是void,在方法内部进行输出:不带的返回值类型为MvcHtmlString,所以只能这样使用:    @Html.Partial 对应 @{Html.RenderPartial(....);}    @Html.Action 对应 @{Html.R

asp.net 中@Html.Partial,@Html.Action,@Html.RenderPartial,@Html.RenderAction

1.带有Render的方法返回值是void,在方法内部进行输出:不带的返回值类型为MvcHtmlString,所以只能这样使用: @Html.Partial 对应 @{Html.RenderPartial(....);}@Html.Action 对应 @{Html.RenderAction(....);} 2.Html.Partial可以直接提供用户控件名作为参数, 而Html.Action需要有对应的Action,在Action内部返回PartailResult(即retun PartialV

ASP.NET MVC 中 @Html.Partial,@Html.Action,@Html.RenderPartial,@Html.RenderAction 的区别

1.带有Render的方法返回值是void,在方法内部进行输出:不带的返回值类型为MvcHtmlString,所以这样使用:    @Html.Partial 对应 @{Html.RenderPartial(....);}    @Html.Action 对应 @{Html.RenderAction(....);} 2.Action.RenderAction加载方法的视图,执行Controller → Model → View的顺序,然后把产生的页面带回到原来的View中再回传.而Partial

关于asp.net MVC3 [email&#160;protected],@Html.Action,@Html.RenderPartial,@Html.RenderAction

1.带有Render的方法返回值是void,在方法内部进行输出:不带的返回值类型为MvcHtmlString,所以只能这样使用:@Html.Partial 对应 @{Html.RenderPartial(....);}@Html.Action 对应 @{Html.RenderAction(....);}2.Html.Partial可以直接提供用户控件名作为参数,而Html.Action需要有对应的Action,在Action内部返回PartailResult(即retun PartialView

Html.Partial方法和Html.RenderPartial方法

分布视图 PartialView 一般是功能相对独立的,类似用户控件的视图代码片段,可以被多个视图引用,引用方式如下. 1,Html.Partial方法和Html.RenderPartial方法 静态类System.Web.Mvc.Html.PartialExtensions,利用扩展方法,扩展了System.Web.Mvc.HtmlHelper,因此有了Html.Partial方法,方法返回值为MvcHtmlString 静态类System.Web.Mvc.Html.RenderPartial

Html.Partial和Html. RenderPartial用法

Html.Partial和Html. RenderPartial用法 Html.partial和RenderPartial的用法与区别Html.partial和RenderPartial都是输出html片段,区别在于Partial是将视图内容直接生成一个字符串并返回(相当于有个转义的过程),RenderPartial方法是直接输出至当前 HttpContext(因为是直接输出,所以性能好).因此它们在视图中的使用方式是不同的:MVC2:输出到 HttpContext输出为string 直接到页面

Html.Partial和Html. RenderPartial

圣殿骑士-蓝剑行动 Html.Partial和Html. RenderPartial用法 Html.Partial和Html. RenderPartial用法 Html.partial和RenderPartial的用法与区别Html.partial和RenderPartial都是输出html片段,区别在于Partial是将视图内容直接生成一个字符串并返回(相当于有个转义的过程),RenderPartial方法是直接输出至当前 HttpContext(因为是直接输出,所以性能好).因此它们在视图中