在ASP。NET MVC,有什么区别:
超文本标记语言Partial和Html。RenderPartial方法 超文本标记语言动作和Html。RenderAction
在ASP。NET MVC,有什么区别:
超文本标记语言Partial和Html。RenderPartial方法 超文本标记语言动作和Html。RenderAction
当前回答
想想@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方法
区别是第一个返回MvcHtmlString,但第二个(Render..)直接输出到响应。
@Html。Partial以html编码的字符串返回视图,并使用相同的视图TextWriter对象。 @Html。这个方法返回void。 @Html。RenderPartial比@Html快。部分
PartialView的语法:
[HttpGet]
public ActionResult AnyActionMethod
{
return PartialView();
}
@Html。Partial和@Html。当你的Partial视图模型与父模型对应时,RenderPartial被使用,我们不需要创建任何动作方法来调用它。
@Html。Action和@Html。当你的局部视图模型独立于父模型时使用RenderAction,基本上当你想在页面上显示任何小部件类型的内容时使用。您必须创建一个action方法,该方法在从视图调用该方法时返回部分视图结果。
关于这个问题:
当Html.RenderPartial()只调用部分的名称时 看来,ASP。NET MVC将传递给部分视图相同的模型和 调用视图模板使用的ViewData字典对象。
“NerdDinner”来自专业ASP。Net MVC 1.0