首页 文章

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

提问于
浏览
953

在ASP.NET MVC中,有什么区别:

  • Html.PartialHtml.RenderPartial

  • Html.ActionHtml.RenderAction

13 回答

  • 13

    更多关于这个问题:

    “当仅使用局部视图的名称调用Html.RenderPartial()时,ASP.NET MVC将向调用视图模板使用的相同Model和ViewData字典对象传递给局部视图 . ”

    来自Professional ASP.NET MVC 1.0的“NerdDinner”

  • 42

    Partial or RenderPartial: 无需创建操作方法 . 当在局部视图上显示的数据已经存在于当前页面的模型中时使用 .

    Action or RenderAction: 需要子操作方法 . 当在视图上显示的数据具有独立模型时使用 .

  • 1147

    据我所知 @Html.RenderPartial() 执行速度比 @Html.Partial() 快,因为Html.RenderPartial给出了对Output的快速响应 .

    因为当我使用 @Html.Partial() 时,我的网站需要更多时间来加载 @Html.RenderPartial()

  • 8

    @Html.Partial 以HTML编码的字符串返回视图并使用相同的视图 TextWriter object . @Html.RenderPartial 此方法返回 void . @Html.RenderPartial@Html.Partial

    PartialView 的语法:

    [HttpGet] 
     public ActionResult AnyActionMethod
     {
         return PartialView();
     }
    
  • 5

    差异是第一个返回 MvcHtmlString 但第二个( Render.. )输出直接响应 .

  • 21

    Differences:

    • 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() .

    Which one is better for performance?

    从性能角度来看,直接渲染到输出流更好 . RenderPartial() 做了完全相同的事情,并且比 Partial() 的性能更好 .

  • 8

    当您的部分视图模型与父模型相对应时,将使用 @Html.Partial@Html.RenderPartial ,我们不需要创建任何操作方法来调用它 .

    当您的部分视图模型独立于父模型时,将使用 @Html.Action@Html.RenderAction ,基本上,当您要在页面上显示任何窗口小部件类型内容时使用它 . 您必须创建一个action方法,该方法在从视图调用方法时返回部分视图结果 .

  • 55

    对于“部分”,我总是使用它如下:

    如果您需要在页面中包含需要通过控制器进行的操作(就像使用Ajax调用那样),那么请使用“Html.RenderPartial” .

    如果你有一个'静态'包含没有链接到控制器本身,只是在'共享'文件夹中,例如,使用“HTML.partial”

  • 7

    Html.Partial :返回 MvcHtmlString 并缓慢

    Html.RenderPartial :直接在输出流上渲染/写入并返回 void ,与 Html.Partial 相比,它非常快

  • 2

    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.PartialHtml.RenderPartial

  • 2

    Html.Partial 返回一个String . 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.ActionHtml.RenderAction .

  • 17

    将@ 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);
    }
    
  • 78

    这是我发现的:

    当您没有要发送到视图的模型并且有很多html要返回时,请使用 RenderAction ,而不需要将其存储在变量中 .

    如果没有要发送到视图的模型并且需要一些文本,请使用 Action 返回需要存储在变量中 .

    当你有一个模型要发送到视图时使用 RenderPartial ,并且会有很多不需要存储在变量中的html .

    如果要将模型发送到视图,请使用 Partial ,并且需要将一些文本存储在变量中 .

    RenderActionRenderPartial 更快 .

相关问题