.net - net - render partial view mvc 5




Html.Partial vs Html.RenderPartial & Html.Action vs Html.RenderAction (9)

الفرق الأول هو إرجاع MvcHtmlString ولكن الثاني ( Render.. ) إخراج مباشرة إلى الاستجابة.

في ASP.NET MVC ، ما هو الفرق بين:

  • Html.Partial و Html.RenderPartial
  • Html.Action و Html.RenderAction

المزيد عن السؤال:

"عندما يتم استدعاء Html.RenderPartial () مع اسم العرض الجزئي فقط ، سيتم تمرير ASP.NET MVC إلى طريقة العرض الجزئية نفس كائنات قاموس الطراز و ViewData المستخدمة بواسطة قالب طريقة عرض الاستدعاء."

"NerdDinner" من Professional ASP.NET MVC 1.0


فكر في @ Html.Partial كما تم نسخ كود HTML إلى الصفحة الرئيسية. فكر في @ Html.RenderPartial باعتباره عنصر تحكم مستخدم .ascx مدمج في الصفحة الرئيسية. لدى عنصر تحكم مستخدم .ascx مقدار الحمل أكثر بكثير.

"@ Html.Partial" تقوم بإرجاع سلسلة مشفرة html التي يتم إنشاؤها مضمنة مع الأصل. يصل إلى نموذج الوالد.

إرجاع "@ Html.RenderPartial" المكافئ لعنصر تحكم مستخدم .ascx. يحصل على نسخته الخاصة من صفحة ViewDataDictionary ولا تؤثر التغييرات التي تم إجراؤها على ViewData الخاص بـ RenderPartial على 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);
}

هذا ما وجدته:

استخدم RenderAction عندما لا يكون لديك نموذج لإرساله إلى العرض ولديك الكثير من html لإعادته لا يحتاج إلى تخزينه في متغير.

استخدم الإجراء عندما لا يتوفر لديك نموذج لإرساله إلى العرض ولديك القليل من النص لإعادته ليتم تخزينه في متغير.

استخدم RenderPartial عندما يكون لديك نموذج لإرساله إلى العرض وسيكون هناك الكثير من html التي لا تحتاج إلى تخزينها في متغير.

استخدم Partial عندما يكون لديك نموذج لإرساله إلى العرض وسيكون هناك نص صغير يحتاج إلى تخزينه في متغير.

تعد أداة RenderAction و RenderPartial أسرع.


يتم استخدام @Html.Partial و @Html.RenderPartial عندما يكون نموذج العرض الجزئي الخاص بك هو المراسلات الخاصة بالنموذج الرئيسي ، فنحن لسنا بحاجة إلى إنشاء أي أسلوب إجراء لاستدعاء هذا.

يتم استخدام @Html.Action و @Html.RenderAction عندما يكون نموذج العرض الجزئي الخاص بك مستقلاً عن النموذج الأصل ، يتم استخدامه بشكل أساسي عندما تريد عرض أي نوع من أنواع الأدوات في الصفحة. يجب عليك إنشاء طريقة إجراء تقوم بإرجاع نتيجة مشاهدة جزئية أثناء استدعاء الطريقة من طريقة العرض.


يكون نوع الإرجاع من Html.RenderAction يعني أنه يعرض الردود مباشرة في عرض حيث يكون نوع الإرجاع من 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();
        }
    }

سيؤدي هذا إلى إرجاع سلسلة Html من طريقة العرض.

وينطبق هذا أيضًا على Html.Partial و Html.RenderPartial


Html.Partial : إرجاع MvcHtmlString وبطء

Html.RenderPartial : تقديم / كتابة مباشرة على دفق الإخراج وإرجاع void وهو سريع جداً بالمقارنة مع Html.Partial


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 .


اختلافات:

  1. يتم إرجاع نوع الإرجاع RenderPartial ، حيث إرجاع Partial MvcHtmlString

  2. بناء الجملة لاستدعاء أساليب Partial() و RenderPartial() في طرق عرض Razor

    @ Html.Partial ( "PartialViewName")
    @ {Html.RenderPartial ("PartialViewName") ؛ }

  3. بناء الجملة لاستدعاء أساليب Partial() و RenderPartial() في طرق عرض الويب

[٪: Html.Partial ("PartialViewName")٪]
[٪ Html.RenderPartial ("PartialViewName") ؛ ٪]

فيما يلي الأسئلة الشائعة 2 المقابلة المتعلقة Partial() و RenderPartial() متى تستخدم Partial() على RenderPartial() والعكس؟

والفرق الرئيسي هو أن RenderPartial() إرجاع الفراغ وسيتم كتابة الإخراج مباشرة إلى دفق الإخراج ، حيث إرجاع الأسلوب Partial() MvcHtmlString ، التي يمكن تعيينها إلى متغير ومعالجتها إذا لزم الأمر. لذلك ، عندما تكون هناك حاجة لتعيين الإخراج إلى متغير لمعالجة ذلك ، استخدم Partial () ، وإلا استخدم RenderPartial ().

أيهما أفضل للأداء؟

من منظور الأداء ، يكون العرض بشكل مباشر إلى تدفق الإخراج أفضل. RenderPartial() بالضبط نفس الشيء وهو أفضل للأداء عبر Partial() .





renderaction