এমভিসি 2 তে এইচটিএমএল. পার্টিয়াল (ভিউ, মডেল) এবং এইচটিএমএল.রেন্ডার পার্টিয়াল (দেখুন, মডেল) এর মধ্যে পার্থক্য (যদি থাকে)?


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উত্পন্ন এইচটিএমএল পৃষ্ঠাতে লেখার পরিবর্তে আপনি দেখতে, সংরক্ষণ করতে বা পরিচালনা করতে চাইলে আপনি কল করবেন ।


ঠিক আছে, তাই কোনও নেই :) যেমনটি আমি ভেবেছিলাম, আমি সেগুলি নির্বিঘ্নে ব্যবহার করতে পারি বলে আমার ধারণা। ধন্যবাদ :)
স্টাফেন

40
না, পার্থক্যটি হ'ল রিটার্নের ধরণ, যেমন স্ল্যাকস বলেছে। এটি অ-তুচ্ছ পারফরম্যান্স অনুসারে, দাবি করা হয়েছে যে সরাসরি আউটপুট স্ট্রিমে রেন্ডারিং করা ভাল (যার কারণেই তারা ডাব্লু / অকার্যকর রেন্ডার পার্টিশিয়াল দিয়ে শুরু করেছিলেন)। আংশিক পরীক্ষার ক্ষেত্রে বেশিরভাগই কার্যকর (ইমো), যদিও স্ল্যাকস বলেছে যে কিছু জায়গা রয়েছে যা আপনি উত্পাদন কোডে রেন্ডার করার আগে আউটপুট ম্যানিপুলেট করতে চান। তারা ঠিক বিরল, ইমো।
পল

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

3
@ পল: আমরা আরও কত পারফর্মেন্ট কথা বলছি? দাবিগুলির সাথে কি কোনও পরীক্ষা বা মানদণ্ড যুক্ত রয়েছে? এটি আসল মাংস আছে কিনা তা দেখতে আকর্ষণীয় হবে বা এটি কেবল একটি মাইক্রো-অপ্টিমাইজেশন রয়েছে কিনা।
ক্রিস প্র্যাট

1
আমার কাছে একটি প্রশ্ন হ'ল: উভয়ই ফলাফল স্রোতে উপস্থাপিত হবে আপনি নির্বিশেষে যে কোনও ব্যবহার করুন (যেহেতু রেজার কেবল এটি রেন্ডার ভিউটির পাঠ্য রচয়িকারকে প্রেরণে পাঠাচ্ছে না), যদি তারা উভয় একই অভ্যন্তরীণ পদ্ধতিতে কল করে তবে কেন একজনের কি অন্যের চেয়ে বেশি পারফরম্যান্স হবে? এটি কি তার নিজস্ব অভ্যন্তরীণ বাফারকে ঘুরিয়ে দেওয়ার কারণে (যা প্রয়োজন অনুসারে ক্রমান্বয়ে প্রসারিত হবে)? এছাড়াও আমি আনন্দিত যে অন্য কেউ ইমেলগুলি রেন্ডার করতে ভিউ মডেলটি ব্যবহার করতে দেখেছেন; অন্য বিকাশকারী ভেবেছিলেন যে আমি এটি অত্যধিক করছিলাম তবে আপনি যে স্ট্রিংয়ের মধ্যে সমস্ত কিছু থেকে বাঁচতে পারবেন তার চেয়ে পরিষ্কার এবং সহজ কৌশলটি হ'ল
অ্যালেন ক্লার্ক কোপল্যান্ড জুনিয়র

4

এটি ডিনো এস্পোসিতোর একটি দুর্দান্ত ব্যাখ্যা:

দুটি পদ্ধতির মধ্যে পার্থক্যটি ছোট এবং নিরীহ দেখায় তবে এটি কীভাবে পরিচালনা করতে হয় তা না জানলে এটি আপনাকে কামড় দিতে পারে। দুটি পদ্ধতির মধ্যে মূল পার্থক্য হ'ল:

  • Partial এইচটিএমএল-এনকোডযুক্ত স্ট্রিং প্রদান করে
  • 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 অন্য উত্স থেকে অনুলিপি করার সময়, অন্তত ক্রেডিট দিন। এটি প্রো এএসপি.নেট এমভিসি 3 ফ্রেমওয়ার্ক (বা কমপক্ষে একটি নতুন সংস্করণ) এর একটি নির্লজ্জ শব্দ-কথার অনুলিপি।
রোবট্রন 10
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.