在ASP.NET MVC中,有什么区别:
Html.Partial 和 Html.RenderPartial
Html.Partial
Html.RenderPartial
Html.Action 和 Html.RenderAction
Html.Action
Html.RenderAction
更多关于这个问题:
“当仅使用局部视图的名称调用Html.RenderPartial()时,ASP.NET MVC将向调用视图模板使用的相同Model和ViewData字典对象传递给局部视图 . ”
来自Professional ASP.NET MVC 1.0的“NerdDinner”
Partial or RenderPartial: 无需创建操作方法 . 当在局部视图上显示的数据已经存在于当前页面的模型中时使用 .
Action or RenderAction: 需要子操作方法 . 当在视图上显示的数据具有独立模型时使用 .
据我所知 @Html.RenderPartial() 执行速度比 @Html.Partial() 快,因为Html.RenderPartial给出了对Output的快速响应 .
@Html.RenderPartial()
@Html.Partial()
因为当我使用 @Html.Partial() 时,我的网站需要更多时间来加载 @Html.RenderPartial()
@Html.Partial 以HTML编码的字符串返回视图并使用相同的视图 TextWriter object . @Html.RenderPartial 此方法返回 void . @Html.RenderPartial 比 @Html.Partial 快
@Html.Partial
TextWriter
@Html.RenderPartial
void
PartialView 的语法:
PartialView
[HttpGet] public ActionResult AnyActionMethod { return PartialView(); }
差异是第一个返回 MvcHtmlString 但第二个( Render.. )输出直接响应 .
MvcHtmlString
Render..
Differences:
RenderPartial 的返回类型是 void ,其中 Partial 返回 MvcHtmlString
RenderPartial
Partial
在Razor视图中调用 Partial() 和 RenderPartial() 方法的语法
Partial()
RenderPartial()
@ Html.Partial(“PartialViewName”)@ {Html.RenderPartial(“PartialViewName”); }
[%:Html.Partial(“PartialViewName”)%] [%Html.RenderPartial(“PartialViewName”); %]
以下是与 Partial() 和 RenderPartial() 相关的2个常见面试问题 . 您何时使用 Partial() 而不是 RenderPartial() ,反之亦然?
主要区别在于 RenderPartial() 返回void并且输出将直接写入输出流,其中 Partial() 方法返回 MvcHtmlString ,可以将其分配给变量并在需要时对其进行操作 . 因此,当需要将输出分配给变量以进行操作时,请使用Partial(),否则使用RenderPartial() .
Which one is better for performance?
从性能角度来看,直接渲染到输出流更好 . RenderPartial() 做了完全相同的事情,并且比 Partial() 的性能更好 .
当您的部分视图模型与父模型相对应时,将使用 @Html.Partial 和 @Html.RenderPartial ,我们不需要创建任何操作方法来调用它 .
当您的部分视图模型独立于父模型时,将使用 @Html.Action 和 @Html.RenderAction ,基本上,当您要在页面上显示任何窗口小部件类型内容时使用它 . 您必须创建一个action方法,该方法在从视图调用方法时返回部分视图结果 .
@Html.Action
@Html.RenderAction
对于“部分”,我总是使用它如下:
如果您需要在页面中包含需要通过控制器进行的操作(就像使用Ajax调用那样),那么请使用“Html.RenderPartial” .
如果你有一个'静态'包含没有链接到控制器本身,只是在'共享'文件夹中,例如,使用“HTML.partial”
Html.Partial :返回 MvcHtmlString 并缓慢
Html.RenderPartial :直接在输出流上渲染/写入并返回 void ,与 Html.Partial 相比,它非常快
Html.RenderAction 的返回类型是 void ,这意味着它直接在View中呈现响应,其中 Html.Action 的返回类型为 MvcHtmlString 您可以在控制器中捕获其渲染视图并使用以下方法对其进行修改
protected string RenderPartialViewToString(string viewName, object model) { if (string.IsNullOrEmpty(viewName)) viewName = ControllerContext.RouteData.GetRequiredString("action"); ViewData.Model = model; using (StringWriter sw = new StringWriter()) { ViewEngineResult viewResult = ViewEngines.Engines.FindPartialView(ControllerContext, viewName); ViewContext viewContext = new ViewContext(ControllerContext, viewResult.View, ViewData, TempData, sw); viewResult.View.Render(viewContext, sw); return sw.GetStringBuilder().ToString(); } }
这将返回View的Html字符串 .
这也适用于 Html.Partial 和 Html.RenderPartial
Html.Partial 返回一个String . Html.RenderPartial 在内部调用 Write 并返回 void .
Write
基本用法是:
// Razor syntax @Html.Partial("ViewName") @{ Html.RenderPartial("ViewName"); } // WebView syntax <%: Html.Partial("ViewName") %> <% Html.RenderPartial("ViewName"); %>
在上面的代码段中,两个调用都会产生相同的结果 .
虽然可以将 Html.Partial 的输出存储在变量中或从方法返回,但是不能使用 Html.RenderPartial 来执行此操作 . 结果将在执行/评估期间写入 Response 流 .
Response
这也适用于 Html.Action 和 Html.RenderAction .
将@ Html.Partial视为复制到父页面的HTML代码 . 将@ Html.RenderPartial视为合并到父页面中的.ascx用户控件 . .ascx用户控件的开销要大得多 .
'@Html.Partial' 返回一个html编码的字符串,该字符串与父节点内联构造 . 它访问父模型 .
'@Html.RenderPartial' 返回.ascx用户控件的等效项 . 它获得了自己的页面副本's ViewDataDictionary and changes made to the RenderPartial' s ViewData不会影响父级的ViewData .
使用反射我们发现:
public static MvcHtmlString Partial(this HtmlHelper htmlHelper, string partialViewName, object model, ViewDataDictionary viewData) { MvcHtmlString mvcHtmlString; using (StringWriter stringWriter = new StringWriter(CultureInfo.CurrentCulture)) { htmlHelper.RenderPartialInternal(partialViewName, viewData, model, stringWriter, ViewEngines.Engines); mvcHtmlString = MvcHtmlString.Create(stringWriter.ToString()); } return mvcHtmlString; } public static void RenderPartial(this HtmlHelper htmlHelper, string partialViewName) { htmlHelper.RenderPartialInternal(partialViewName, htmlHelper.ViewData, null, htmlHelper.ViewContext.Writer, ViewEngines.Engines); }
这是我发现的:
当您没有要发送到视图的模型并且有很多html要返回时,请使用 RenderAction ,而不需要将其存储在变量中 .
如果没有要发送到视图的模型并且需要一些文本,请使用 Action 返回需要存储在变量中 .
当你有一个模型要发送到视图时使用 RenderPartial ,并且会有很多不需要存储在变量中的html .
如果要将模型发送到视图,请使用 Partial ,并且需要将一些文本存储在变量中 .
RenderAction 和 RenderPartial 更快 .
13 回答
更多关于这个问题:
来自Professional ASP.NET MVC 1.0的“NerdDinner”
Partial or RenderPartial: 无需创建操作方法 . 当在局部视图上显示的数据已经存在于当前页面的模型中时使用 .
Action or RenderAction: 需要子操作方法 . 当在视图上显示的数据具有独立模型时使用 .
据我所知
@Html.RenderPartial()
执行速度比@Html.Partial()
快,因为Html.RenderPartial给出了对Output的快速响应 .因为当我使用
@Html.Partial()
时,我的网站需要更多时间来加载@Html.RenderPartial()
@Html.Partial
以HTML编码的字符串返回视图并使用相同的视图TextWriter
object .@Html.RenderPartial
此方法返回void
.@Html.RenderPartial
比@Html.Partial
快PartialView
的语法:差异是第一个返回
MvcHtmlString
但第二个(Render..
)输出直接响应 .Differences:
RenderPartial
的返回类型是void
,其中Partial
返回MvcHtmlString
在Razor视图中调用
Partial()
和RenderPartial()
方法的语法Partial()
和RenderPartial()
方法的语法以下是与
Partial()
和RenderPartial()
相关的2个常见面试问题 . 您何时使用Partial()
而不是RenderPartial()
,反之亦然?主要区别在于
RenderPartial()
返回void并且输出将直接写入输出流,其中Partial()
方法返回MvcHtmlString
,可以将其分配给变量并在需要时对其进行操作 . 因此,当需要将输出分配给变量以进行操作时,请使用Partial(),否则使用RenderPartial() .Which one is better for performance?
从性能角度来看,直接渲染到输出流更好 .
RenderPartial()
做了完全相同的事情,并且比Partial()
的性能更好 .当您的部分视图模型与父模型相对应时,将使用
@Html.Partial
和@Html.RenderPartial
,我们不需要创建任何操作方法来调用它 .当您的部分视图模型独立于父模型时,将使用
@Html.Action
和@Html.RenderAction
,基本上,当您要在页面上显示任何窗口小部件类型内容时使用它 . 您必须创建一个action方法,该方法在从视图调用方法时返回部分视图结果 .对于“部分”,我总是使用它如下:
如果您需要在页面中包含需要通过控制器进行的操作(就像使用Ajax调用那样),那么请使用“Html.RenderPartial” .
如果你有一个'静态'包含没有链接到控制器本身,只是在'共享'文件夹中,例如,使用“HTML.partial”
Html.Partial
:返回MvcHtmlString
并缓慢Html.RenderPartial
:直接在输出流上渲染/写入并返回void
,与Html.Partial
相比,它非常快Html.RenderAction
的返回类型是void
,这意味着它直接在View中呈现响应,其中Html.Action
的返回类型为MvcHtmlString
您可以在控制器中捕获其渲染视图并使用以下方法对其进行修改这将返回View的Html字符串 .
这也适用于
Html.Partial
和Html.RenderPartial
Html.Partial
返回一个String .Html.RenderPartial
在内部调用Write
并返回void
.基本用法是:
在上面的代码段中,两个调用都会产生相同的结果 .
虽然可以将
Html.Partial
的输出存储在变量中或从方法返回,但是不能使用Html.RenderPartial
来执行此操作 . 结果将在执行/评估期间写入Response
流 .这也适用于
Html.Action
和Html.RenderAction
.将@ Html.Partial视为复制到父页面的HTML代码 . 将@ Html.RenderPartial视为合并到父页面中的.ascx用户控件 . .ascx用户控件的开销要大得多 .
'@Html.Partial' 返回一个html编码的字符串,该字符串与父节点内联构造 . 它访问父模型 .
'@Html.RenderPartial' 返回.ascx用户控件的等效项 . 它获得了自己的页面副本's ViewDataDictionary and changes made to the RenderPartial' s ViewData不会影响父级的ViewData .
使用反射我们发现:
这是我发现的:
当您没有要发送到视图的模型并且有很多html要返回时,请使用 RenderAction ,而不需要将其存储在变量中 .
如果没有要发送到视图的模型并且需要一些文本,请使用 Action 返回需要存储在变量中 .
当你有一个模型要发送到视图时使用 RenderPartial ,并且会有很多不需要存储在变量中的html .
如果要将模型发送到视图,请使用 Partial ,并且需要将一些文本存储在变量中 .
RenderAction 和 RenderPartial 更快 .