`
- 浏览:
130151 次
- 性别:
- 来自:
吉林
-
@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#代码中,需要通过分号标识语句结束。
分享到:
Global site tag (gtag.js) - Google Analytics
相关推荐
### ASP.NET MVC中Html.Partial, RenderPartial, Action, RenderAction 的区别与用法 #### Html.Partial 和 RenderPartial 1. **Html.Partial** - **定义**:`Html.Partial` 方法用于将一个部分视图(partial ...
在C#的ASP.NET MVC框架中,`Html.RenderPartial`和`Html.RenderAction`都是用于在视图(View)中嵌入部分视图(Partial View)的辅助方法,以实现界面的模块化和代码重用。然而,它们之间存在一些重要的区别,这决定...
这两个方法的区别在于`@Html.Partial`不执行视图的写入操作,而`@Html.RenderPartial`则会。例如: ```html <!-- 在Index.cshtml中 --> @Html.Partial("_Sidebar") ``` 这里,`_Sidebar`是分部视图的名称...
`RenderPartial` 方法用于在当前视图中嵌入另一个视图。 ```csharp @Html.Partial("_UserControls") ``` **6. 路由生成** `RouteLink` 方法用于根据路由规则生成超链接。 ```csharp @Html.RouteLink("前往产品页...
@tf.custom_gradient ...由于数值不稳定性,x=100处的梯度(▽f=∂f∂xi⃗\bigtriangledown f=\frac{\partial f}{\partial x}\vec i▽f=∂x∂fi)由函数得到的值为NanNanNan 解决方法 使用@custom_gradi
@Html.Partial(“Auction”, auction); } ``` 五、显示数据 MVC 架构分为三层,模型、视图和控制器。三层之间彼此分离且协同工作,其中,就需要控制器担当“协调”的角色,视图将请求交给控制器,控制器对模型...
同时,通过`@Html.Partial()`和`@Html.Action()`方法,可以在多个视图中轻松插入和控制这些分部视图,从而提升开发效率和应用的可维护性。无论是对于初学者还是有经验的开发者,掌握分部视图的使用都是ASP.NET MVC...
Evans.-.Partial.differential.equations.djvu
"MVC页面之间参数传递实现过程图解" MVC页面之间参数传递实现过程图解是指在MVC模式中,页面...我们可以通过Html.RenderAction方式和Html.RenderPartial方式来实现参数传递,但是需要注意它们之间的区别和使用方法。
两者的区别在于,`Html.Partial`是异步执行,而`Html.RenderPartial`是同步执行。在这个例子中,我们将使用`Html.Partial`: ```html @{ ViewBag.Title = "首页"; } <!DOCTYPE html> <html lang="zh-CN"> ...
XunLeiWebSetup10.1.33.770gw.exe.6ksmrhi.partial
K10Stat091 (1).zip.9quoixb.partial
本文将重点讨论两种方法:Html.RenderAction和Html.RenderPartial,以及它们在传递参数时的区别。 **一、Html.RenderAction方式** Html.RenderAction方法用于在当前视图中嵌入另一个Action的结果,而不是直接呈现...
在视图页面中,可以通过`@Html.Partial`或`@Html.Action`来调用分部页。例如: ```csharp @Html.Partial("_Pagination", (BiosealMVCWeb.Models.Pagination)ViewBag.Pagination) @Html.Action("NewsMenu", new { ...
<%Html.RenderPartial("PartialView");%> 12. Html.TextArea() 用于创建一个文本区域框,第一个参数是文本区域的名称,第二个参数是一个匿名对象,用来设置文本区域的样式或其他属性。 <%=Html.TextArea("myTxtArea...
newifi_Y1_Build20150506_V1.6.13.20_beta_sign.bin.z6azwr9.partial
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
本文重点讨论`functools.partial`,这是一个非常实用的功能,它允许我们预设函数的一部分参数,从而创建出新的、更简单的函数。 一、`functools.partial`的简单介绍 `functools.partial`的主要作用是创建一个...