Html.Partial बनाम Html.RenderPartial & Html.Action बनाम Html.RenderAction


जवाबों:


1237

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


71
क्या आप जानते हैं कि आप एक से दूसरे का उपयोग क्यों करेंगे?
जेसन

156
प्रदर्शन-वार यह बेहतर है कि RenderPartial का उपयोग किया जाए, जैसा कि यहां दिया गया है: stackoverflow.com/questions/2729815/…
व्लादिमीर Iliescu

13
एक चर में परिणाम के बारे में बिट के लिए धन्यवाद। यह रेंडर समकक्ष के ऊपर आंशिक या कार्रवाई का उपयोग करने का कारण है।
डेविड कासा

8
Html.Partial()रेजर के साथ अधिक धाराप्रवाह वाक्य रचना करने के लिए बनाया गया था। जैसा @Vlad ने कहा, Html.RenderPartial()अधिक कुशल है।
त्सही अशेर

2
@ त्सही बताती है कि यह _LoginPartial के लिए MVC प्रोजेक्ट टेम्पलेट में क्यों उपयोग किया जाता है। धन्यवाद।
नियमित रूप से

86

मूल पृष्ठ में कॉपी किए गए HTML कोड के रूप में @ Html.Partial के बारे में सोचो। @ 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);
}

3
क्या आप कह रहे हैं कि Html.Partial का Html.RenderPartial से बेहतर प्रदर्शन है?
संख्या

15
हां और नहीं, Html.Partial इनलाइन प्रदान की गई है और कम संसाधन गहन लेकिन अधिक समय लेने वाली है। Html.RenderPartial को अलग से और इसलिए तेजी से प्रस्तुत किया गया है, लेकिन अधिक संसाधन गहन है। यदि आपके पास संसाधन उपयोग को कम करने के लिए उच्च मात्रा में ट्रैफ़िक पक्ष Html.Partial है। यदि आपके पास ट्रैफ़िक वॉल्यूम पक्ष Html.RenderPartial में भिन्न परिवर्तन हैं।
ब्रेट जोन्स

4
मेरी राय में, यह दूसरा तरीका है: रेंडरपार्टियल में निश्चित रूप से बेहतर प्रदर्शन है क्योंकि यह सीधे आउटपुट स्ट्रीम पर लिखता है। आंशिक रूप से एक ही विधि को आंतरिक रूप से कहा जाता है, लेकिन एक स्ट्रिंगराइटर में लिखता है जिसे MvcHtmlString के रूप में लौटाया जाता है और अंत में आउटपुट स्ट्रीम पर लिखा जाता है। इसलिए यह बहुत अधिक मेमोरी आवंटित करता है।
slfan

2
@BrettJones "संसाधन गहन" से आपका क्या अभिप्राय है? सिर्फ इसलिए कि Partialएक बफर में रेंडर करने का मतलब यह नहीं है कि यह अतुल्यकालिक रूप से प्रस्तुत किया गया है - काफी विपरीत - मैं यह नहीं देख सकता कि आप कैसे दावा कर सकते हैं RenderPartial"अधिक संसाधन गहन"।
दाई

57

यहाँ मैं क्या पाया है:

रेंडरएक्शन का उपयोग करें जब आपके पास देखने के लिए भेजने के लिए एक मॉडल नहीं है और वापस लाने के लिए बहुत सारे HTML हैं जिन्हें एक चर में संग्रहीत करने की आवश्यकता नहीं है।

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

RenderPartial का उपयोग तब करें जब आपके पास दृश्य को भेजने के लिए एक मॉडल हो और इसमें बहुत सारे html होंगे जिन्हें किसी चर में संग्रहीत करने की आवश्यकता नहीं है।

जब आप देखने के लिए भेजने के लिए एक मॉडल रखते हैं तो आंशिक का उपयोग करें और थोड़ा सा पाठ होगा जिसे एक चर में संग्रहीत करने की आवश्यकता है।

RenderAction और RenderPartial तेजी से कर रहे हैं।


2
उत्तर देना (क्यों?) सबसे अच्छा उत्तर है इसलिए यह मेरे लिए सबसे अच्छा है।
YEH

55

अंतर पहले एक है, MvcHtmlStringलेकिन दूसरा ( Render..) प्रतिक्रिया के लिए सीधे आउटपुट देता है।


MvcHtmlString को प्रतिक्रिया में भी नहीं जोड़ा जाएगा?
शाद

21

मेरे अनुसार Html की वजह @Html.RenderPartial()से तेजी से निष्पादन @Html.Partial()हुआ है। रेंडरपार्टियल आउटपुट का त्वरित जवाब देता है।

क्योंकि जब मैं उपयोग करता हूं @Html.Partial(), तो मेरी वेबसाइट की तुलना में लोड होने में अधिक समय लगता है @Html.RenderPartial()


21

@Html.Partialऔर @Html.RenderPartialइसका उपयोग तब किया जाता है जब आपका आंशिक दृश्य मॉडल मूल मॉडल का पत्राचार होता है, हमें इसे कॉल करने के लिए कोई क्रिया विधि बनाने की आवश्यकता नहीं है।

@Html.Actionऔर @Html.RenderActionइसका उपयोग तब किया जाता है जब आपका आंशिक दृश्य मॉडल मूल मॉडल से स्वतंत्र होता है, मूल रूप से इसका उपयोग तब किया जाता है जब आप पृष्ठ पर किसी भी विजेट प्रकार की सामग्री प्रदर्शित करना चाहते हैं। आपको एक एक्शन मेथड बनाना होगा जो व्यू से मेथड को कॉल करते समय आंशिक व्यू रिजल्ट देता है।


3
अच्छा जवाब, क्योंकि आप यह भी समझाते हैं कि आंशिक ओवर एक्शन का उपयोग कब करना है
raklos

15

प्रश्न के बारे में अधिक जानकारी:

"जब Html.RenderPartial () को आंशिक दृश्य के नाम से पुकारा जाता है, ASP.NET MVC आंशिक दृश्य को उसी मॉडल और ViewData शब्दकोश ऑब्जेक्ट को कॉलिंग व्यू टेम्प्लेट द्वारा उपयोग किए जाने पर पास करेगा।"

व्यावसायिक ASP.NET MVC 1.0 से "नर्डडिनर"


9

रिटर्न प्रकार यह Html.RenderActionहै voidकि इसका मतलब यह है कि यह सीधे देखने में प्रतिक्रियाओं को प्रस्तुत करता है कि रिटर्न प्रकार कहां 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.RenderPartial के साथ कैसे कर सकता हूं?
xatz

1
हम Html.RenderPartial का उपयोग नहीं कर सकते क्योंकि इसकी वापसी का प्रकार शून्य है
नम्रता जैन

9

आंशिक या RenderPartial: क्रिया विधि बनाने की आवश्यकता नहीं है। आंशिक दृश्य पर प्रदर्शित होने वाले डेटा का उपयोग वर्तमान पृष्ठ के मॉडल में पहले से मौजूद है।

क्रिया या रेंडरएक्शन: बाल क्रिया विधि की आवश्यकता होती है। जब दृश्य पर डेटा प्रदर्शित करने के लिए स्वतंत्र मॉडल का उपयोग करें।


8

अंतर:

  1. रिटर्न का प्रकार RenderPartialहै void, जहां Partialरिटर्न के रूप मेंMvcHtmlString

  2. रेज़र के विचारों को लागू करने Partial()और RenderPartial()तरीकों के लिए सिंटैक्स

    @ Html.Partial ("आंशिक दृश्य नाम")
    @ {Html.RenderPartial (" आंशिक दृश्य नाम "); }

  3. वेबॉइंट विचारों में आह्वान Partial()और RenderPartial()तरीकों के लिए सिंटैक्स

[%: Html.Partial ("PartialViewName")%]
[% Html.RenderPartial (" आंशिक दृश्य नाम "); %]

निम्नलिखित से संबंधित 2 आम साक्षात्कार सवाल कर रहे हैं Partial()और RenderPartial() जब आप का प्रयोग करेंगे Partial()से अधिक RenderPartial()विपरीत उपाध्यक्ष और?

मुख्य अंतर यह है कि RenderPartial()रिटर्न शून्य है और आउटपुट सीधे आउटपुट स्ट्रीम पर लिखा जाएगा, जहां Partial()विधि रिटर्न के रूप में है MvcHtmlString, जिसे एक चर को सौंपा जा सकता है और यदि आवश्यक हो तो इसे हेरफेर कर सकता है। इसलिए, जब इसे हेरफेर करने के लिए एक चर को आउटपुट निर्दिष्ट करने की आवश्यकता होती है, तो आंशिक () का उपयोग करें, अन्यथा रेंडरपार्टियल () का उपयोग करें।

प्रदर्शन के लिए कौन सा बेहतर है?

एक प्रदर्शन के नजरिए से, सीधे आउटपुट स्ट्रीम में रेंडर करना बेहतर है। RenderPartial()बिल्कुल वैसा ही करता है और प्रदर्शन के लिए बेहतर है Partial()


5

Html.Partial: रिटर्न MvcHtmlStringऔर धीमा

Html.RenderPartial: आउटपुट स्ट्रीम और रिटर्न पर सीधे प्रस्तुत करना / लिखना voidऔर यह तुलना में बहुत तेज हैHtml.Partial


3

"आंशिक" के लिए मैं हमेशा इसका उपयोग इस प्रकार करता हूं:

यदि कोई ऐसी चीज़ है जिसे आपको किसी ऐसे पृष्ठ में शामिल करना है, जिसे आपको नियंत्रक के माध्यम से जाना होगा (जैसे आप एक अजाक्स कॉल के साथ) तो "Html.RenderPartial" का उपयोग करें।

यदि आपके पास एक 'स्थिर' शामिल है, जो प्रति-नियंत्रक से जुड़ा नहीं है और उदाहरण के लिए 'साझा' फ़ोल्डर में, "HTML.partial" का उपयोग करें


2

@Html.PartialHTML-एन्कोडेड स्ट्रिंग में दृश्य लौटाता है और समान दृश्य TextWriterऑब्जेक्ट का उपयोग करता है । @Html.RenderPartialयह विधि वापस आती है void@Html.RenderPartialसे तेज है@Html.Partial

इसके लिए वाक्य रचना PartialView:

 [HttpGet] 
 public ActionResult AnyActionMethod
 {
     return PartialView();
 }
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.