`
ymq267
  • 浏览: 128902 次
  • 性别: 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)的辅助方法,以实现界面的模块化和代码重用。然而,它们之间存在一些重要的区别,这决定...

    asp.net mvc 分部视图的基本使用

    这两个方法的区别在于`@Html.Partial`不执行视图的写入操作,而`@Html.RenderPartial`则会。例如: ```html &lt;!-- 在Index.cshtml中 --&gt; @Html.Partial("_Sidebar") ``` 这里,`_Sidebar`是分部视图的名称...

    asp.net mvc @html用法

    `RenderPartial` 方法用于在当前视图中嵌入另一个视图。 ```csharp @Html.Partial("_UserControls") ``` **6. 路由生成** `RouteLink` 方法用于根据路由规则生成超链接。 ```csharp @Html.RouteLink("前往产品页...

    @tf.custom_gradient

    @tf.custom_gradient ...由于数值不稳定性,x=100处的梯度(▽f=∂f∂xi⃗\bigtriangledown f=\frac{\partial f}{\partial x}\vec i▽f=∂x∂f​i)由函数得到的值为NanNanNan 解决方法 使用@custom_gradi

    【ASP.NET编程知识】ASP.NET MVC学习教程之Razor语法.docx

    @Html.Partial(“Auction”, auction); } ``` 五、显示数据 MVC 架构分为三层,模型、视图和控制器。三层之间彼此分离且协同工作,其中,就需要控制器担当“协调”的角色,视图将请求交给控制器,控制器对模型...

    ASP.NET MVC中分部视图的应用方法

    同时,通过`@Html.Partial()`和`@Html.Action()`方法,可以在多个视图中轻松插入和控制这些分部视图,从而提升开发效率和应用的可维护性。无论是对于初学者还是有经验的开发者,掌握分部视图的使用都是ASP.NET MVC...

    Evans.-.Partial.differential.equations.djvu

    Evans.-.Partial.differential.equations.djvu

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

    "MVC页面之间参数传递实现过程图解" MVC页面之间参数传递实现过程图解是指在MVC模式中,页面...我们可以通过Html.RenderAction方式和Html.RenderPartial方式来实现参数传递,但是需要注意它们之间的区别和使用方法。

    MVC3分部视图简单实例

    两者的区别在于,`Html.Partial`是异步执行,而`Html.RenderPartial`是同步执行。在这个例子中,我们将使用`Html.Partial`: ```html @{ ViewBag.Title = "首页"; } &lt;!DOCTYPE html&gt; &lt;html lang="zh-CN"&gt; ...

    XunLeiWebSetup10.1.33.770gw.exe.6ksmrhi.partial

    XunLeiWebSetup10.1.33.770gw.exe.6ksmrhi.partial

    K10Stat091 (1).zip.9quoixb.partial

    K10Stat091 (1).zip.9quoixb.partial

    MVC页面之间参数传递解析

    本文将重点讨论两种方法:Html.RenderAction和Html.RenderPartial,以及它们在传递参数时的区别。 **一、Html.RenderAction方式** Html.RenderAction方法用于在当前视图中嵌入另一个Action的结果,而不是直接呈现...

    MVC 3模板页和分部页的使用1

    在视图页面中,可以通过`@Html.Partial`或`@Html.Action`来调用分部页。例如: ```csharp @Html.Partial("_Pagination", (BiosealMVCWeb.Models.Pagination)ViewBag.Pagination) @Html.Action("NewsMenu", new { ...

    @Html的用法

    &lt;%Html.RenderPartial("PartialView");%&gt; 12. Html.TextArea() 用于创建一个文本区域框,第一个参数是文本区域的名称,第二个参数是一个匿名对象,用来设置文本区域的样式或其他属性。 &lt;%=Html.TextArea("myTxtArea...

    newifi_Y1_Build20150506_V1.6.13.20_beta_sign.bin.z6azwr9.partial

    newifi_Y1_Build20150506_V1.6.13.20_beta_sign.bin.z6azwr9.partial

    Allocation Removal by Partial Evaluation in a Tracing JIT - 2010 (bolz-allocation-removal)-计算机科学

    Allocation Removal by Partial Evaluation in a Tracing JITCarl Friedrich Bolza Antonio Cunia Maciej Fijałkowskib Michael LeuschelaSamuele Pedronic Armin Rigoaa Heinrich-Heine-Universität Düsseldorf,...

    关于调整部分县城街长责任分工的通知.pdf.8ga65a9.partial

    关于调整部分县城街长责任分工的通知.pdf.8ga65a9.partial

    浅谈python标准库--functools.partial

    本文重点讨论`functools.partial`,这是一个非常实用的功能,它允许我们预设函数的一部分参数,从而创建出新的、更简单的函数。 一、`functools.partial`的简单介绍 `functools.partial`的主要作用是创建一个...

Global site tag (gtag.js) - Google Analytics