শক্তিশালী-টাইপ করা আংশিক দৃশ্যে অতিরিক্ত ভিউ ডেটা পাস করুন


174

আমার কাছে দৃ strongly়-টাইপযুক্ত আংশিক দৃশ্য রয়েছে যা একটি প্রোডাক্ট চিত্র গ্রহণ করে এবং যখন এটি রেন্ডার করা হয় তখন আমি এটিকে কিছু অতিরিক্ত ভিউডেটা সরবরাহ করতে চাই যা ধারণকৃত পৃষ্ঠায় গতিশীলভাবে তৈরি করি। আমি কীভাবে আমার দৃ strongly়ভাবে টাইপ করা বস্তু এবং আমার কাস্টম ভিউ ডেটা উভয়কে রেন্ডার পার্টিশিয়াল কল দিয়ে আংশিক দর্শনে পাস করতে পারি?

var index = 0;
foreach (var image in Model.Images.OrderBy(p => p.Order))
{
  Html.RenderPartial("ProductImageForm", image); // < Pass 'index' to partial
  index++;
}

উত্তর:


251

রেন্ডার পার্টিশিয়াল আরও একটি প্যারামিটার নেয় যা কেবল একটি ভিউডাটাড অভিধান হয়। আপনি প্রায় সেখানে আছেন, কেবল এটিকে কল করুন:

Html.RenderPartial(
      "ProductImageForm", 
       image, 
       new ViewDataDictionary { { "index", index } }
); 

নোট করুন যে এটি আপনার অন্যান্য দর্শনের ডিফল্টরূপে ডিফল্ট ভিউডাটা ওভাররাইড করবে। যদি আপনি ভিউডাটাতে কিছু যুক্ত করে থাকেন তবে এটি এই নতুন অভিধানে থাকবে না যা আপনি আপনার আংশিক দৃষ্টিতে যাচ্ছেন to


2
আমি এটি করার চেষ্টা করছি এবং এটি ফিরে আসছে "অব্যবস্থাকে শূন্য রূপান্তর করতে পারে না"।
প্রোগ্রামাদ

4
@ প্রোগ্রগ্রামটি @ এইচটিএমএল.রেন্ডার পার্টিশিয়াল () থেকে @ সরানোর চেষ্টা করুন, এটি আমার জন্য এই সমস্যার সমাধান করেছে তবে আমি @}} কোড ব্লকের মধ্যে একটি লাইনে রেন্ডার পার্টিয়াল () কল করছি।
দানজারভিস

5
আমি নীচে কর্টসের উত্তরটি পরীক্ষা করার পরামর্শ দিচ্ছি। তিনি বিদ্যমান ভিউডাটাতে অতিরিক্ত ডেটা যুক্ত করেন।
raRaRa

162

কি womp পোস্ট করেছে তা বাড়ানোর জন্য, আপনি যদি এর ViewDataDictionaryমতো নির্মাণকারী ওভারলোড ব্যবহার করেন তবে বিদ্যমান ভিউ ডেটা ধরে রাখার সময় নতুন ভিউ ডেটা পাস পারবেন :

Html.RenderPartial(
      "ProductImageForm", 
       image, 
       new ViewDataDictionary(this.ViewData) { { "index", index } }
); 

3
আপনার যদি TemplateInfo.HtmlFieldPrefixশিশু নিয়ন্ত্রণ ধরে রাখতে হয় যা অন্যথায় পুনরায় সেট করা দরকার এটি খুব কার্যকর হতে পারে
সাইমন_উইভার

12
এটি অবশ্যই আরও ভাল সমাধান। ভিউটাটা হারিয়ে যাওয়ার অর্থ আপনি মডেলস্টেট এবং সমস্ত বৈধতা হারাবেন। +1
কেভিন ফারুঙ্গিয়া

এটি কেবলমাত্র আপনার ভিউডাটা ডিকোরিয়াল অভিধানে কোনও টেম্পলেটআইএনএফটিএমএলফিল্ডপ্রিফিক্স পাস না করা হলে কাজ করবে বলে মনে হচ্ছে। আমি উত্তরে কেবল ইলাস্ট্রেটেড হিসাবে একটি ভেরিয়েবল পাস করতে পারি, বা একটি টেম্পলেটআইনফ.এইচটিএমএলফিল্ডপ্রিফিক্স পাস করতে পারি তবে দুটিও নয়।
ফিরক্স

45
@Html.Partial("_Header", new ViewDataDictionary { { "HeaderName", "User Management" }, { "TitleName", "List Of Users" } })
or
@{Html.RenderPartial("_Header", new ViewDataDictionary { { "HeaderName", "User Management" }, { "TitleName", "List Of Users" } });}

আংশিক পৃষ্ঠা (_এইডার):

<div class="row titleBlock">
    <h1>@ViewData["HeaderName"].ToString()</h1>
    <h5>@ViewData["TitleName"].ToString()</h5>
</div>

2
এটি সর্বাধিক সম্পূর্ণ উত্তরের মতো (যদিও .ToString () অপ্রয়োজনীয়) বলে মনে হচ্ছে।
কলিন

9

আমি মনে করি এটি কোন কাজ করা উচিত?

ViewData["currentIndex"] = index;

6
যদিও এটি করার খুব শক্তিশালী উপায় নয়, এটি আমাকে ভম্পের উত্তর থেকে কীভাবে একটি ডেটা মান মূল্য পুনরুদ্ধার করতে পারে তা বুঝতে সহায়তা করেছিল did
ম্যাথিয়াস লাইককেগার্ড লরেনজেন

6

অন্য একটি ক্লাস তৈরি করুন যা আপনার দৃ contains়ভাবে টাইপ করা শ্রেণি রয়েছে।

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

তারপরে দৃশ্যে, নিশ্চিত হয়ে নিন যে আপনি নিজের নতুন বর্গের উত্তরাধিকারী এবং কোডের বিটগুলি পরিবর্তন করুন যা এখন ভুল হবে। যেমন আপনার ক্ষেত্রের রেফারেন্স।

আশাকরি এটা সাহায্য করবে. যদি না হয় তবে আমাকে জানান এবং আমি নির্দিষ্ট কোড পোস্ট করব।


4

অতিরিক্ত ডেটা পাস করার সবচেয়ে সহজ উপায় হ'ল @ জোয়েল মার্টিনেজ নোট হিসাবে দেখার জন্য বিদ্যমান ভিউডাটাতে ডেটা যুক্ত করা। তবে, আপনি যদি নিজের ভিউটাটা দূষিত করতে না চান তবে রেন্ডার পার্টিশিয়ালের একটি পদ্ধতি রয়েছে যা তিনটি আর্গুমেন্ট গ্রহণ করে পাশাপাশি আপনি যে দ্বি-যুক্তির সংস্করণ দেখান সেগুলি নিয়ে থাকে। তৃতীয় যুক্তি হল ভিউডাটাডিয়েশনারি। আপনি যে অতিরিক্ত তথ্য প্রবেশ করতে চান তাতে কেবলমাত্র আপনার আংশিকর জন্য আপনি একটি পৃথক ভিউডেটাড অভিধান তৈরি করতে পারেন।


1

এটি কাজ করা উচিত।

this.ViewData.Add("index", index);

Html.RenderPartial(
      "ProductImageForm", 
       image, 
       this.ViewData
); 

ধন্যবাদ! আপনি যখন শিশু পার্টিয়াল ইত্যাদির জন্য ভিউডাটা ডিকশনারি প্রসারিত করেন তখন এটি সত্যিই দরকারী
বিকাশ

1

আমি জানি এটি একটি পুরানো পোস্ট তবে কোর 3.0 ব্যবহার করে অনুরূপ সমস্যার মুখোমুখি হওয়ায় আমি এটি পেরিয়ে এসেছি, আশা করি এটি কারও সাহায্য করবে।

@{
Layout = null;
ViewData["SampleString"] = "some string need in the partial";
}

<partial name="_Partial" for="PartialViewModel" view-data="ViewData" />

0

আপনি গতিশীল পরিবর্তনশীল ভিউব্যাগ ব্যবহার করতে পারেন

ViewBag.AnotherValue = valueToView;
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.