在ASP。NET MVC,有什么区别:
超文本标记语言Partial和Html。RenderPartial方法 超文本标记语言动作和Html。RenderAction
在ASP。NET MVC,有什么区别:
超文本标记语言Partial和Html。RenderPartial方法 超文本标记语言动作和Html。RenderAction
超文本标记语言Partial返回一个字符串。超文本标记语言RenderPartial内部调用Write并返回void。
基本用法是:
// Razor syntax
@Html.Partial("ViewName")
@{ Html.RenderPartial("ViewName"); }
// WebView syntax
<%: Html.Partial("ViewName") %>
<% Html.RenderPartial("ViewName"); %>
在上面的代码片段中,两个调用将产生相同的结果。
而一个可以存储Html的输出。在变量中使用Partial或从方法中返回,不能使用Html.RenderPartial。
在执行/计算期间,结果将被写入Response流。
这也适用于Html。Action和Html.RenderAction。
根据我的说法,由于Html, @Html.RenderPartial()比@Html.Partial()执行得更快。RenderPartial给Output一个快速响应。
因为当我使用@Html.Partial()时,与@Html.RenderPartial()相比,我的网站需要更多的时间来加载
想想@Html。部分HTML代码复制到父页。 想想@Html。RenderPartial作为一个.ascx用户控件合并到父页面。.ascx用户控件的开销要大得多。
“@Html。Partial'返回一个html编码的字符串,该字符串与父对象内联构造。它访问父类的模型。
“@Html。RenderPartial'返回相当于一个.ascx用户控件。它获得自己的页面的viewdatdictionary副本,并且对RenderPartial的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是空的,这意味着它直接在视图中渲染返回类型为Html的响应。你可以在控制器中捕获它的渲染视图,并使用以下方法修改它
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();
}
}
这将返回视图的Html字符串。
这也适用于Html。Partial和Html。RenderPartial方法
关于这个问题:
当Html.RenderPartial()只调用部分的名称时 看来,ASP。NET MVC将传递给部分视图相同的模型和 调用视图模板使用的ViewData字典对象。
“NerdDinner”来自专业ASP。Net MVC 1.0
超文本标记语言Partial:返回MvcHtmlString和slow
超文本标记语言RenderPartial:直接渲染/写入输出流,并返回void,与Html相比,它非常快。部分
对于“partial”,我总是这样使用:
如果有一些东西你需要包含在一个页面,你需要通过控制器(就像你会用Ajax调用),然后使用“Html.RenderPartial”。
如果你有一个“静态”包含,它本身没有链接到控制器,而只是在“共享”文件夹中,例如,使用“HTML.partial”
@Html。Partial和@Html。当你的Partial视图模型与父模型对应时,RenderPartial被使用,我们不需要创建任何动作方法来调用它。
@Html。Action和@Html。当你的局部视图模型独立于父模型时使用RenderAction,基本上当你想在页面上显示任何小部件类型的内容时使用。您必须创建一个action方法,该方法在从视图调用该方法时返回部分视图结果。
@Html。Partial以html编码的字符串返回视图,并使用相同的视图TextWriter对象。 @Html。这个方法返回void。 @Html。RenderPartial比@Html快。部分
PartialView的语法:
[HttpGet]
public ActionResult AnyActionMethod
{
return PartialView();
}
以下是我的发现:
使用RenderAction当你没有一个模型发送到视图,有很多html带回,不需要存储在一个变量。
当你没有要发送到视图的模型,并且有一些需要存储在变量中的文本要返回时,请使用Action。
使用RenderPartial当你有一个模型发送到视图,将有很多html,不需要存储在一个变量。
当你有一个模型要发送到视图,并且有一些文本需要存储在一个变量中时,使用Partial。
RenderAction和RenderPartial更快。
Partial或RenderPartial:不需要创建动作方法。当要在局部视图上显示的数据已经存在于当前页面的模型中时使用。
Action或RenderAction:需要子动作方法。当数据显示在视图上具有独立模型时使用。
差异:
RenderPartial的返回类型是void,而as Partial返回MvcHtmlString Razor视图中调用Partial()和RenderPartial()方法的语法 @Html.Partial(“PartialViewName”) @ {Html.RenderPartial(“PartialViewName”);} 在webform视图中调用Partial()和RenderPartial()方法的语法
[%: Html.Partial(“PartialViewName”) %] [% Html.RenderPartial(“PartialViewName”); %]
以下是与Partial()和RenderPartial()相关的2个常见面试问题 什么时候你会使用Partial()而不是RenderPartial(),反之亦然?
主要的区别是RenderPartial()返回void,输出将直接写入输出流,而Partial()方法返回MvcHtmlString,它可以被赋值给一个变量,并在需要时操作它。因此,当需要将输出分配给变量进行操作时,请使用Partial(),否则使用RenderPartial()。
哪一种性能更好?
从性能的角度来看,直接呈现到输出流更好。RenderPartial()做完全相同的事情,并且比Partial()的性能更好。