এইচটিএমএল. পার্টিয়াল বনাম এইচটিএমএল.রেন্ডার পার্টিয়াল এবং এইচটিএমএল.অ্যাকশন বনাম এইচটিএমএল.রেন্ডার অ্যাকশন


1032

এএসপি.এনইটি এমভিসিতে, এর মধ্যে পার্থক্য কী:

  • Html.Partial এবং Html.RenderPartial
  • Html.Action এবং Html.RenderAction

2
stackoverflow.com/a/30258091/4336332 এটি পাশাপাশি সহায়তা করতে পারে। এটা দেখ.
নিখিল সাসওয়াদে

উত্তর:


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
পারফরম্যান্স-ভিত্তিতে রেন্ডার পার্টিশিয়াল ব্যবহার করা আরও ভাল, এখানে উত্তর হিসাবে: stackoverflow.com/questions/2729815/…
ভ্লাদ ইলিসেকু

13
একটি পরিবর্তনশীল মধ্যে ফলাফল সংরক্ষণ সম্পর্কে বিট জন্য ধন্যবাদ। রেন্ডার কাউন্টার পার্টের উপর আংশিক বা অ্যাকশন ব্যবহার করার কারণ এটি।
ডেভিড কাসা

8
Html.Partial()রেজারের সাথে আরও সাবলীল বাক্য গঠন করার জন্য তৈরি করা হয়েছিল। যেমন @ ভ্লাদ বলেছেন, Html.RenderPartial()আরও দক্ষ।
সোশি আশের

2
@ ত্সাহী ব্যাখ্যা করেছেন যে এটি লোগিন পার্টিশিয়ালের জন্য এমভিসি প্রকল্পের টেমপ্লেটে কেন ব্যবহৃত হয়েছে। ধন্যবাদ।
নিয়মিতভাবে

86

এইচটিএমএল কোডটি প্যারেন্ট পৃষ্ঠায় অনুলিপি করা হিসাবে @ এইচটিএমএল. পার্টিয়ালটিকে ভাবুন। @ এইচটিএমএল.রেন্ডার পার্টিশিয়ালটিকে প্যারেন্ট পৃষ্ঠায় অন্তর্ভুক্ত .asx ব্যবহারকারী নিয়ন্ত্রণ হিসাবে ভাবেন। একটি .ascx ব্যবহারকারী নিয়ন্ত্রণে অনেক বেশি ওভারহেড রয়েছে।

'@ এইচটিএমএল. পার্টিয়াল' এইচটিএমএল এনকোডেড স্ট্রিং দেয় যা পিতামাতার সাথে ইনলাইন তৈরি হয়। এটি পিতামাতার মডেলটি অ্যাক্সেস করে।

'@ এইচটিএমএল.রেন্ডার পার্টিশিয়াল' .asx ব্যবহারকারী নিয়ন্ত্রণের সমতুল্য প্রদান করে। এটি পৃষ্ঠার ভিউডেটা ডেটাডিয়ের নিজস্ব অনুলিপি পেয়েছে এবং রেন্ডার পার্টিশিয়ালের ভিউ ডেটাতে করা পরিবর্তনগুলি পিতামাতার ভিউ ডেটাতে প্রভাব ফেলবে না।

প্রতিচ্ছবি ব্যবহার করে আমরা পাই:

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
আপনি কি বলছেন যে এইচটিএমএল. পার্টিয়ালের এইচটিএমএল.রেন্ডার পার্টিশিয়ালের চেয়ে ভাল পারফরম্যান্স আছে?
21

15
হ্যাঁ এবং না, এইচটিএমএল. পার্টিয়ালটি ইনলাইন রেন্ডার হয়েছে এবং কম সংস্থান নিবিড় তবে বেশি সময়সাপেক্ষ। এইচটিএমএল.রেন্ডার পার্টিশিয়াল পৃথকভাবে রেন্ডার করা হয় এবং তাই দ্রুত হয় তবে এটি আরও সংস্থার নিবিড়। যদি আপনার উচ্চ পরিমাণ থাকে তবে ট্র্যাফিকটি এইচটিএমএলকে সমর্থন করে resource আপনার যদি ট্র্যাফিক ভলিউমে খুব কম সময় পরিবর্তন হয় তবে এইচটিএমএলকে উপস্থাপন করুন ender
ব্রেট জোনস

4
আমার মতে, এটি অন্যভাবে রাউন্ড: রেন্ডার পার্টিশিয়ালের স্পষ্টতই আরও ভাল পারফরম্যান্স রয়েছে কারণ এটি সরাসরি আউটপুট স্ট্রিমে লিখেছে। আংশিক অভ্যন্তরীণভাবে একই পদ্ধতিতে কল করে তবে একটি স্ট্রিং রাইটারে লেখেন যা এমভিসিএইচটিএমএল স্ট্রিং হিসাবে ফিরে আসে এবং শেষ পর্যন্ত আউটপুট প্রবাহে লেখা হয়। সুতরাং এটি অনেক বেশি মেমরি বরাদ্দ করে।
slfan

2
@ ব্র্যাটজোনস "সংস্থান নিবিড়" বলতে কী বোঝ? কেবল Partialবাফার হিসাবে রেন্ডার করার অর্থ এই নয় যে এটি অবিচ্ছিন্নভাবে রেন্ডার হয়েছে - একেবারে বিপরীত - আপনি কীভাবে দাবি করতে পারেন RenderPartialতা "আরও সংস্থান নিবিড়" হিসাবে আমি দেখতে পাচ্ছি না ।
দাই

57

আমি যা পেয়েছি তা এখানে:

যখন আপনার কাছে ভিউটি প্রেরণের জন্য কোনও মডেল না থাকে এবং ফিরিয়ে আনতে অনেকগুলি এইচটিএমএল থাকে তখন এটিকে রেন্ডার অ্যাকশন ব্যবহার করুন যা কোনও ভেরিয়েবলের মধ্যে সঞ্চয় করার দরকার নেই।

ব্যবহারের অ্যাকশন যখন আপনি একটি মডেল দৃশ্যে পাঠাতে এবং ফিরিয়ে আনতে যে চাহিদা একটি পরিবর্তনশীল সংরক্ষণ করার জন্য পাঠ্য একটি সামান্য বিট আছে হবে না।

ভিউতে প্রেরণের জন্য আপনার কাছে মডেল থাকলে রেন্ডার পার্টিয়ালটি ব্যবহার করুন এবং প্রচুর এইচটিএমএল থাকবে যা ভেরিয়েবলে সঞ্চয় করার দরকার নেই।

আপনার কাছে ভিউতে প্রেরণের জন্য কোনও মডেল থাকলে আংশিক ব্যবহার করুন এবং সেখানে কিছুটা পাঠ্য থাকবে যা ভেরিয়েবলে সঞ্চয় করতে হবে।

রেন্ডার অ্যাকশন এবং রেন্ডার পার্টিশিয়াল দ্রুততর।


2
উত্তর দেওয়া (কেন?) সেরা উত্তর তাই এটি আমার পক্ষে সেরা।
YEH

55

পার্থক্য হ'ল প্রথমে একটি MvcHtmlStringকিন্তু দ্বিতীয় ( Render..) আউটপুটগুলি সরাসরি প্রতিক্রিয়া দেখায়।


এমভিসিএইচটিএমএল স্ট্রিংকে পাশাপাশি প্রতিক্রিয়াতে যুক্ত করা হবে না?
Shad

21

আমার মতে এইচটিএমএল-রেন্ডার পার্টিশিয়ালের কারণে @Html.RenderPartial()দ্রুত সম্পাদন @Html.Partial()হয়েছে Out

কারণ আমি যখন ব্যবহার করি তখন @Html.Partial()আমার ওয়েবসাইটটির তুলনায় লোড করতে আরও সময় লাগে @Html.RenderPartial()


21

@Html.Partialএবং @Html.RenderPartialযখন আপনার আংশিক দর্শন মডেলটি পিতামাতার মডেলটির চিঠিপত্র হয় তখন ব্যবহৃত হয়, এটির জন্য আমাদের কোনও ক্রিয়া পদ্ধতি তৈরি করার দরকার নেই।

@Html.Actionএবং @Html.RenderActionযখন আপনার আংশিক দর্শন মডেলটি পিতামাতার মডেল থেকে স্বতন্ত্র থাকে তখন ব্যবহৃত হয়, মূলত আপনি যখন পৃষ্ঠায় কোনও উইজেট ধরণের সামগ্রী প্রদর্শন করতে চান তখন এটি ব্যবহৃত হয়। আপনাকে অবশ্যই একটি অ্যাকশন পদ্ধতি তৈরি করতে হবে যা ভিউ থেকে পদ্ধতিটি কল করার সময় একটি আংশিক দৃশ্য ফলাফল দেয় returns


3
উত্তম উত্তর, কারণ আপনি কখন ব্যাখ্যা করেছেন যে কখন আংশিক ওভার অ্যাকশন ব্যবহার করবেন
রক্লোস

15

প্রশ্ন সম্পর্কে আরও:

"যখন এইচটিএমএল.রেন্ডার পার্টিশিয়াল () কেবলমাত্র আংশিক দৃশ্যের নামের সাথে ডাকা হবে, এএসপি.এনইটি এমভিসি একই কলিং ভিউ টেম্পলেট দ্বারা ব্যবহৃত একই মডেল এবং ভিউডাটা অভিধানের বস্তুগুলিকে আংশিক দৃশ্যে যাবে" "

পেশাদার ASP.NET এমভিসি 1.0 থেকে "NerdDinner"


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.PartialএবংHtml.RenderPartial


এইচটিএমএল.রেন্ডার পার্টিশিয়াল দিয়ে আমি কীভাবে এটি করতে পারি?
xatz

1
আমরা এইচটিএমএল.রেন্ডার পার্টিশিয়ালটি ব্যবহার করতে পারি না কারণ এর রিটার্নের ধরনটি অকার্যকর
নমরতা জৈন

9

আংশিক বা রেন্ডার পার্টিশিয়াল: অ্যাকশন পদ্ধতি তৈরি করার দরকার নেই। আংশিক দৃশ্যে প্রদর্শিত হতে হবে এমন ডেটা বর্তমান পৃষ্ঠার মডেলটিতে উপস্থিত থাকলে ব্যবহার করুন।

ক্রিয়া বা রেন্ডারঅ্যাকশন: শিশু ক্রিয়া পদ্ধতি প্রয়োজন। যখন ভিউতে প্রদর্শনের জন্য ডেটা স্বাধীন মডেল থাকে তখন ব্যবহার করুন।


8

পার্থক্য:

  1. এর রিটার্ন টাইপ RenderPartialহয় void, যেখানে যেমন Partialআয়MvcHtmlString

  2. আহ্বান Partial()RenderPartial()রেজার দর্শনগুলির পদ্ধতিগুলির জন্য সিনট্যাক্স

    @ এইচটিএমএল. পার্টিয়াল ("আংশিকভিউনাম")
    @ {এইচটিএমএল.রেন্ডার পার্টিয়াল ("আংশিকভিউনাম"); }

  3. ওয়েবফর্ম ভিউগুলিতে অনুরোধ Partial()এবং RenderPartial()পদ্ধতিগুলির জন্য সিনট্যাক্স

[%: এইচটিএমএল. পার্টিয়াল ("আংশিকভিউনাম")%]
[% এইচটিএমএল.রেন্ডার পার্টিয়াল ("আংশিকভিউনাম"); %]

নিম্নলিখিত এর সাথে সম্পর্কিত 2 সাধারণ সাক্ষাত্কার প্রশ্ন আছে Partial()এবং RenderPartial() যখন আপনি ব্যবহার করেন Partial()বেশি RenderPartial()বিপরীতভাবে ভাইস এবং?

প্রধান পার্থক্য হ'ল RenderPartial()রিটার্ন বাতিল এবং আউটপুট সরাসরি আউটপুট প্রবাহে লেখা হবে, যেখানে Partial()পদ্ধতিটি ফিরে আসে MvcHtmlString, যা কোনও পরিবর্তনশীলকে বরাদ্দ করা যেতে পারে এবং প্রয়োজনে এটি পরিচালনা করতে পারে। সুতরাং, যখন সামঞ্জস্যের জন্য আউটপুটটি কোনও ভেরিয়েবলের কাছে বরাদ্দ করার প্রয়োজন হয়, তখন আংশিক () ব্যবহার করুন, অন্যথায় রেন্ডারপার্টিয়াল () ব্যবহার করুন।

পারফরম্যান্সের জন্য কোনটি ভাল?

পারফরম্যান্সের দৃষ্টিকোণ থেকে, সরাসরি আউটপুট স্ট্রিমে রেন্ডারিং করা ভাল। RenderPartial()ঠিক একই জিনিস এবং ওভার পারফরম্যান্স জন্য ভাল Partial()


5

Html.Partial: রিটার্ন MvcHtmlStringএবং ধীর

Html.RenderPartial: আউটপুট স্ট্রিম এবং রিটার্নে সরাসরি রেন্ডার / লিখুন voidএবং এর তুলনায় এটি খুব দ্রুতHtml.Partial


3

"আংশিক" জন্য আমি সর্বদা এটি নিম্নলিখিত হিসাবে ব্যবহার করি:

আপনার যদি কোনও পৃষ্ঠায় অন্তর্ভুক্ত করার দরকার হয় যা আপনাকে নিয়ামকের মাধ্যমে যেতে হবে (যেমন আপনি অ্যাজাক্স কল দিয়েছিলেন) তবে "এইচটিএমএল.রেন্ডার পার্টিশিয়াল" ব্যবহার করুন।

আপনার যদি কোনও 'স্ট্যাটিক' অন্তর্ভুক্ত থাকে যা প্রতি-সেয়ে নিয়ন্ত্রকের সাথে লিঙ্কযুক্ত নয় এবং উদাহরণস্বরূপ কেবল 'ভাগ করা' ফোল্ডারে রয়েছে, "HTML.partial" ব্যবহার করুন


2

@Html.Partialএইচটিএমএল-এনকোডেড স্ট্রিংয়ে ভিউটি দেয় এবং একই দর্শন TextWriterবস্তুটি ব্যবহার করে । @Html.RenderPartialএই পদ্ধতি ফিরে void@Html.RenderPartialতুলনায় দ্রুত@Html.Partial

এর বাক্য গঠন PartialView:

 [HttpGet] 
 public ActionResult AnyActionMethod
 {
     return PartialView();
 }
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.