MVC2 में Html.Partial (दृश्य, मॉडल) और Html.RenderPartial (दृश्य, मॉडल) के बीच अंतर (यदि कोई हो) क्या है?


141

प्रकार के अलावा यह वापस लौटता है और तथ्य यह है कि आप इसे अलग तरह से कहते हैं

<% Html.RenderPartial(...); %>
<%= Html.Partial(...) %>  

यदि वे अलग हैं, तो आप एक के बजाय दूसरे को क्यों बुलाएंगे?
परिभाषाएँ:

// Type: System.Web.Mvc.Html.RenderPartialExtensions
// Assembly: System.Web.Mvc, Version=2.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35
// Assembly location: C:\Program Files (x86)\Microsoft ASP.NET\ASP.NET MVC 2\Assemblies\System.Web.Mvc.dll

using System.Web.Mvc;

namespace System.Web.Mvc.Html
{
    public static class RenderPartialExtensions
    {
        public static void RenderPartial(this HtmlHelper htmlHelper, string partialViewName);
        public static void RenderPartial(this HtmlHelper htmlHelper, string partialViewName, ViewDataDictionary viewData);
        public static void RenderPartial(this HtmlHelper htmlHelper, string partialViewName, object model);

        public static void RenderPartial(this HtmlHelper htmlHelper, string partialViewName, object model,
                                     ViewDataDictionary viewData);
    }
}

// Type: System.Web.Mvc.Html.PartialExtensions
// Assembly: System.Web.Mvc, Version=2.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35
// Assembly location: C:\Program Files (x86)\Microsoft ASP.NET\ASP.NET MVC 2\Assemblies\System.Web.Mvc.dll

using System.Web.Mvc;

namespace System.Web.Mvc.Html
{
    public static class PartialExtensions
    {
        public static MvcHtmlString Partial(this HtmlHelper htmlHelper, string partialViewName);

        public static MvcHtmlString Partial(this HtmlHelper htmlHelper, string partialViewName,
                                        ViewDataDictionary viewData);

        public static MvcHtmlString Partial(this HtmlHelper htmlHelper, string partialViewName, object model);

        public static MvcHtmlString Partial(this HtmlHelper htmlHelper, string partialViewName, object model,
                                        ViewDataDictionary viewData);
    }
}

जवाबों:


168

अंतर केवल इतना है कि Partialरिटर्न ए MvcHtmlString, और अंदर बुलाया जाना चाहिए <%= %>, जबकि RenderPartialरिटर्न voidऔर सीधे देखने के लिए प्रदान करता है।

यदि आप स्रोत कोड को देखते हैं, तो आप देखेंगे कि वे दोनों एक ही आंतरिक विधि को कॉल करते हैं, इसे प्रस्तुत करने के लिए एक स्ट्रिंगरिटर पास करना।

Partialयदि आप पेज को लिखने के बजाय जेनरेट किए गए HTML को देखना, सहेजना या उसमें हेरफेर करना चाहते हैं तो आप कॉल करेंगे ।


ठीक है, इसलिए कोई भी :) जैसा कि मैंने सोचा था, मैं उन्हें बिना किसी अनुमान के उपयोग कर सकता हूं। धन्यवाद :)
स्टीफन

40
नहीं, अंतर रिटर्न प्रकार है, जैसा कि SLaks ने कहा था। यह गैर-तुच्छ है। प्रदर्शन-वार, यह दावा किया गया है कि सीधे आउटपुट स्ट्रीम में रेंडर करना बेहतर है (यही वजह है कि वे w / RenderPartial को शुरू करने के लिए गए थे)। आंशिक रूप से परीक्षण में ज्यादातर उपयोगी (imo) है, हालांकि SLaks ने कहा कि कुछ स्थान हो सकते हैं जो आप इसे उत्पादन कोड में रेंडर करने से पहले आउटपुट में हेरफेर करना चाहते हैं। वे सिर्फ दुर्लभ हैं, imo।
पॉल

42
जब आप नियंत्रक में किसी दृश्य का आउटपुट प्राप्त करना चाहते हैं तो आंशिक रूप से भी मदद मिलती है। यह एक ईमेल को प्रारूपित करने के लिए एक दृश्य का उपयोग करने के लिए इस्तेमाल किया जा सकता है।
सैम सेग

3
@ पाओल: हम कितना अधिक प्रदर्शन कर रहे हैं? क्या दावों का कोई परीक्षण या बेंचमार्क उनसे जुड़ा है? यह देखना दिलचस्प होगा कि क्या इसके लिए वास्तविक मांस है या अगर यह सिर्फ एक माइक्रो-अनुकूलन है।
क्रिस प्रैट

1
एक प्रश्न जो मेरे पास है: दोनों को परिणाम स्ट्रीम में प्रस्तुत किया जा रहा है, जिसकी परवाह किए बिना आप उपयोग करते हैं (क्योंकि रेजर केवल इसे रेंडर किए गए दृश्य के TextWriter पर भेजना नहीं कह रहा है), यदि वे दोनों एक ही आंतरिक विधि को कहते हैं, तो क्यों क्या एक दूसरे की तुलना में अधिक प्रदर्शनकारी होगा? क्या यह अपने स्वयं के आंतरिक बफर को स्पिन करने के कारण है (जो आवश्यकतानुसार उत्तरोत्तर विस्तारित होगा)? इसके अलावा, मुझे खुशी है कि ई-मेल को रेंडर करने के लिए व्यू मॉडल का उपयोग करने के लिए किसी और ने देखा; एक और डेवलपर ने सोचा कि मैं इसे कर रहा था, लेकिन यह क्लीनर और एक स्ट्रिंग से हेरफेर करने के लिए आसान है जिसमें आपको सब कुछ से बचना है।
एलन क्लार्क कोपलैंड जूनियर

4

डिनो एस्पोसिटो द्वारा यह एक महान व्याख्या है:

दो तरीकों के बीच का अंतर छोटा और हानिरहित लग सकता है, लेकिन यह आपको काट सकता है यदि आप नहीं जानते कि इसे कैसे संभालना है। दो तरीकों के बीच महत्वपूर्ण अंतर है:

  • Partial HTML-एन्कोडेड स्ट्रिंग देता है
  • RenderPartialएक शून्य विधि है जो सीधे प्रतिक्रिया आउटपुट स्ट्रीम पर लिखती है।

दो तरीकों का उपयोग थोड़ा अलग है:

@Html.Partial("_yourPartialView")
@{ Html.RenderPartial("_yourPartialView "); }

उपयोग करने का विकल्प आपकी आवश्यकताओं पर निर्भर करता है। यदि आपको प्रतिक्रिया स्ट्रीम में इंजेक्ट किए जा रहे स्ट्रिंग को और अधिक हेरफेर करने की आवश्यकता है, तो आपको उपयोग करना चाहिए Partial; अन्यथा RenderPartial जिसके साथ जाना है, सिर्फ इसलिए कि वह सीधे धारा में जाता है-की तुलना में थोड़ा तेज Partial

अंत में, आंशिक विचारों के लिए उपयोग-मामले दो शिविरों में से किसी एक में आते हैं। पहला है जब आप मार्कअप के विभिन्न स्वतंत्र टुकड़ों को एक साथ जोड़कर एक दृश्य बनाते हैं, जैसा कि नीचे है।

<body>
    @{ Html.RenderPartial("_Header"); }
    @Html.Partial("_Sidebar")
    <div class="container body-content">
       @RenderBody()
    </div>
    @{ Html.RenderPartial("_Footer"); }
</body>

इस स्थिति में, अंतिम प्रभाव को चुनने RenderPartialया Partialनहीं बदलने के बारे में आपका निर्णय । हालाँकि, क्योंकि RenderPartialयह थोड़ा तेज़ है, आप इसका उपयोग करना पसंद कर सकते हैं।


4
-1 दूसरे स्रोत से नकल करते समय, कम से कम क्रेडिट दें। यह प्रो ASP.NET MVC 3 फ्रेमवर्क (या कम से कम एक नया संस्करण) से एक ज़बरदस्त शब्द-प्रति-शब्द है।
रोबोटॉन
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.