`
ymq267
  • 浏览: 133725 次
  • 性别: Icon_minigender_1
  • 来自: 吉林
社区版块
存档分类
最新评论

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

 
阅读更多
mvc renderaction   renderpartial  杂谈

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

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

    <%Html.RenderPartial("LogOnUserControl");%>



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

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



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

Controller:----用户控件所在Controller

    public ActionResult UserControl()
    {
        return PartialView();
    }

View:----调用用户控件的View

    <%Html.RenderAction("UserControl","Controller");%>

个人比较喜欢用RenderPartial


RenderPartial和RenderAction都是在Asp.net Mvc中用来显示PartialView的方法,所以在什么时候用哪个方法就是碰到的第一个问题。而要做出正确的选择就需要对这两个都有充分的了解,并且 知道其异同点。这也是本文的主题。
What is Html.RenderPartial

Html.RenderPartial在Asp.net Mvc中是用来调用PartialView的。PartialView基本上就是Asp.net Webform中的UserControl。调用也很简单,只要在View中把PartialView的名字作为参数传递就可以。比如:
<% Html.RenderPartial("YourPartialView", YourData); %>

YourData是一个可选的参数。如果有,那么YourData会被赋给PartialView中的Model。如果没有,那么调用 RenderPartial的View中的Mode和ViewData会被传递给PartialView。也就是说,PartialView的数据来自于 调用的View。
What is Html.RenderAction

Html.RenderAction允许你直接调用某一个Action,并把返回的结果直接显示在当前调用的View中。比如:
<% Html.RenderAction("Show", "Tag"); %>

此时,TagController中的Show方法会被调用。由于这时调用的是一个Action方法,因此可以在此方法中完成你想要完成的各种操作,比如从数据库,文件等获取数据,写数据等并返回结果。
[OutputCache(Duration=6000)]
public ActionResult Show()
{
    var tagData = null;
    //Get data from database
    //tagData = tagService.AllHot();
    return PartialView("TagCloud", tagData);
}

TagCloud是一个简单的PartialView文件而已。
两者的相同点

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

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

如何选择

根据两者不同点中的第二点,由于RenderAction会调用一个新的Action方法,而Asp.net Mvc中Action是最小的缓存单位,因此如果某一个“块”的数据比较固定,不会因为访问者的不同而发生变化,那么这时就是使用 RenderAction的时候了。 题外话,对于RenderAction会发起一个新的Request,感觉对调用页面的流程有点破坏。一个View在显示的时候,自己又发起一个 Request去获取数据来显示,显然有点破坏了作为一个View的原则:

    A View should only know how to render, but not what to render!

    ASP.NET MVC 中@Html.Partial,@Html.Action,@Html.RenderPartial,@Html.RenderAction区别
     对这四个的区别做一个总结,清理一下思路,方便以后使用:

    1、带有Render的方法    @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");

    

    这3个HtmlHelper的扩展方法

    Html.Partial:是将视图内容直接生成一个字符串并返回,

    Html.RenderPartial方法是直接输出至当前HttpContext,

    而Html.RenderAction还调用一下Action。重新执行一次Controller → Model → View的顺序。

    因此它们在视图中的使用方式是不同的:

    <%Html.RenderPartial("MyPartialView");%>

    <%Html.RenderAction("MyPartialView");%>

    <%=Html.Partial("MyPartialView")%> (相当于一个字符串)

    注意:RenderPartial以<%开头,末尾有分号。而Partial,RenderAction以<%=开头,末尾没有分号。这里RenderPartial,RenderAction 方法不是返回一个字符串,而是直接输出内容到调用视图模板的输出流中。 方法后使用分号,否则会导致编译器错误。这是因为<% %>代码块是一串代码语句,在C#代码中,需要通过分号标识语句结束。
分享到:
评论

相关推荐

    Asp.net MVC中Html.Partial, RenderPartial, Action,RenderAction 区别和用法

    ### ASP.NET MVC中Html.Partial, RenderPartial, Action, RenderAction 的区别与用法 #### Html.Partial 和 RenderPartial 1. **Html.Partial** - **定义**:`Html.Partial` 方法用于将一个部分视图(partial ...

    C#中Html.RenderPartial与Html.RenderAction的区别分析

    在C#的ASP.NET MVC框架中,`Html.RenderPartial`和`Html.RenderAction`都是用于在视图(View)中嵌入部分视图(Partial View)的辅助方法,以实现界面的模块化和代码重用。然而,它们之间存在一些重要的区别,这决定...

    MVC页面之间参数传递实现过程图解

    @Html.RenderPartial("Boot", new { Name = "John", Sex = "Male" }) 在上面的代码中,我们使用Html.RenderPartial方式将参数传递到Boot页面中,并将参数包装成一个匿名对象。 但是,使用Html.RenderPartial方式...

    MVC页面之间参数传递解析

    RenderAction通过调用Action并传递参数,而RenderPartial直接将参数传给部分视图的Model。在实际开发中,应根据具体需求选择合适的方法。例如,如果需要执行额外的业务逻辑或数据处理,RenderAction可能是更好的选择...

    asp.net mvc

    &lt;%: Html.RenderPartial("_PartialView") %&gt; ``` **效果:** 这同样不会直接生成 HTML 输出,而是加载指定的部分视图并将其渲染到当前视图中。 ##### 12. `Html.RenderUserControl` 用于在当前视图中渲染一个用户...

    ASP.NET MVC中的AJAX应用

    关于何时使用`RenderAction`和`RenderPartial`,一般原则是:如果你需要在视图中展示的数据是通过额外的动作方法计算或获取的,且这个数据与当前视图的数据无关,那么应该使用`RenderAction`。相反,如果只是简单地...

Global site tag (gtag.js) - Google Analytics