Html.Partial vs Html.RenderPartial& Html.Action vs Html.RenderAction

在ASP.NET MVC中,有什么区别:
Html.Partial
Html.RenderPartial
Html.Action
Html.RenderAction
    
已邀请:
Html.Partial
返回一个字符串。
Html.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.Partial视为复制到父页面的HTML代码。 将@ Html.RenderPartial视为合并到父页面中的.ascx用户控件。 .ascx用户控件的开销要大得多。 '@ Html.Partial'返回一个html编码的字符串,该字符串与父节点内联构造。它访问父模型。 '@ Html.RenderPartial'返回等效的.ascx用户控件。它获得了自己的页面ViewDataDictionary副本,对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);
}
    
差异是第一个返回
MvcHtmlString
但第二个(
Render..
)直接返回响应。     
这是我发现的: 如果没有要发送到视图的模型并且有很多html要返回,则不需要将其存储在变量中,请使用RenderAction。 如果没有要发送到视图的模型并且需要将一些文本带回需要存储在变量中,请使用Action。 当你有一个模型要发送到视图时使用RenderPartial,并且会有很多不需要存储在变量中的html。 如果要将模型发送到视图,则使用“部分”,并且会有一些需要存储在变量中的文本。 RenderAction和RenderPartial更快。     
根据我的说法,由于Html.RenderPartial给出了对输出的快速响应,因此执行速度比
@Html.Partial()
快。 因为当我使用
@Html.Partial()
时,与
@Html.RenderPartial()
相比,我的网站需要更多时间来加载     
当您的部分视图模型与父模型对应时,使用
@Html.Partial
@Html.RenderPartial
,我们不需要创建任何操作方法来调用它。 当您的局部视图模型独立于父模型时,使用
@Html.Action
@Html.RenderAction
,基本上,当您要在页面上显示任何窗口小部件类型内容时使用它。您必须创建一个action方法,该方法在从视图调用方法时返回部分视图结果。     
更多关于这个问题:   “当使用部分名称调用Html.RenderPartial()时   看来,ASP.NET MVC将传递给局部视图相同的Model和   调用视图模板使用的ViewData字典对象。“ 来自Professional ASP.NET MVC 1.0的“NerdDinner”     
返回类型
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
    
Partial或RenderPartial:无需创建操作方法。当在局部视图上显示的数据已经存在于当前页面的模型中时使用。 Action或RenderAction:需要子操作方法。当在视图上显示的数据具有独立模型时使用。     
区别: 返回类型
RenderPartial
void
,其中
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()
的性能更好。     
Html.Partial
:返回
MvcHtmlString
并缓慢
Html.RenderPartial
:直接在输出流上渲染/写入并返回
void
,与
Html.Partial
相比速度非常快     
对于“部分”,我总是使用它如下: 如果您需要在页面中包含需要通过控制器进行的操作(就像使用Ajax调用那样),那么请使用“Html.RenderPartial”。 如果你有一个'静态'包含没有链接到控制器本身,只是在'共享'文件夹中,例如,使用“HTML.partial”     
@Html.Partial
以HTML编码的字符串返回视图,并使用相同的视图
TextWriter
对象。
@Html.RenderPartial
这种方法返回
void
@Html.RenderPartial
@Html.Partial
PartialView
的语法:
 [HttpGet] 
 public ActionResult AnyActionMethod
 {
     return PartialView();
 }
    

要回复问题请先登录注册