আমি এমভিসি 4 এ আংশিক দৃশ্যে প্যারামিটারগুলি কীভাবে পাস করতে পারি


152

আমার এই জাতীয় লিঙ্ক আছে:

 <a href='Member/MemberHome/Profile/Id'><span>Profile</span></a>

এবং আমি যখন এটি ক্লিক করব তখন এটি এই আংশিক পৃষ্ঠাটিকে কল করবে:

 @{
    switch ((string)ViewBag.Details)
    {

        case "Profile":
        {
           @Html.Partial("_Profile"); break;
        }

    }
}

আংশিক পৃষ্ঠা_প্রফাইলে রয়েছে:

Html.Action("Action", "Controller", model.Paramter) 

উদাহরণ:

@Html.Action("MemberProfile", "Member", new { id=1 })   // id is always changing

আমার সন্দেহ হ'ল আমি এই "আইডি" কে মডেল.প্যারামিটার অংশে কীভাবে পাস করতে পারি ?

আমার নিয়ামকরা হলেন:

 public ActionResult MemberHome(string id)
    {
        ViewBag.Details = id;
        return View();
    }
  public ActionResult MemberProfile(int id = 0)
    {
        MemberData md = new Member().GetMemberProfile(id);
        return PartialView("_ProfilePage",md);
    }

2
আমি পাই না। সম্ভবত আপনি যদি নিজের নিয়ন্ত্রক এবং ক্রিয়া যুক্ত করেন তবে এটি হয়ত সহায়তা করতে পারে, তবে এটি এখন লেখা হিসাবে আমি আপনার প্রশ্নটি বুঝতে পারি না।
লিয়াম

এমএসডিএন
গ্রুন্ডি

উত্তর:


346

আপনার প্রশ্নটি বোঝা শক্ত, তবে যদি আমি সংক্ষিপ্তসারটি পাই, তবে আপনার মূল দৃষ্টিভঙ্গিতে আপনার কিছুটা মূল্য আছে যা আপনি সেই দৃষ্টিতে আংশিকভাবে রেন্ডার হওয়ার সাথে সাথে অ্যাক্সেস করতে চান।

আপনি যদি কেবলমাত্র আংশিক নাম দিয়ে একটি আংশিক রেন্ডার করেন:

@Html.Partial("_SomePartial")

এটি আসলে আপনার মডেলটিকে অন্তর্নিহিত প্যারামিটার হিসাবে পাস করবে, আপনি কল করার মতোই:

@Html.Partial("_SomePartial", Model)

এখন, আপনার আংশিকটি আসলে এটি ব্যবহার করতে সক্ষম হওয়ার জন্য, যদিও এটির একটি সংজ্ঞায়িত মডেলও থাকা দরকার, উদাহরণস্বরূপ:

@model Namespace.To.Your.Model

@Html.Action("MemberProfile", "Member", new { id = Model.Id })

বিকল্পভাবে, আপনি যদি এমন কোনও মূল্য নিয়ে কাজ করছেন যা আপনার দর্শনের মডেলটিতে নেই (এটি ভিউব্যাগে রয়েছে বা কোনওভাবে ভিউতে উত্পন্ন কোনও মান রয়েছে, তবে আপনি একটি পাস করতে পারেন ViewDataDictionary

@Html.Partial("_SomePartial", new ViewDataDictionary { { "id", someInteger } });

এবং তারপর:

@Html.Action("MemberProfile", "Member", new { id = ViewData["id"] })

মডেলটির মতো রেজারও স্পষ্টভাবে আপনার আংশিক দৃশ্যটি ViewDataডিফল্টরূপে পাস করবে , সুতরাং যদি ViewBag.Idআপনার নিজের দৃষ্টিভঙ্গি থাকে তবে আপনি একই জিনিসটিকে আপনার আংশিক ক্ষেত্রে উল্লেখ করতে পারেন।


4
যদি আপনি আপনার প্রধান মডেলটিকে একটি ইন্টারফেস প্রয়োগ করে থাকেন তবে আংশিক দৃষ্টিভঙ্গিটি সেই ইন্টারফেসটিকে একটি মডেল হিসাবে ব্যবহার করতে পারেন। তারপরে আপনি এ থেকে অনেকগুলি পুনরায় ব্যবহার করতে পারেন।
জেস

@ ক্রিসপ্রাট বরাবরের মতো খুব ব্যাখ্যামূলক জবাব :) ভোট দিয়েছেন +
মুরাত ইল্ডেজ ২

6
আমার @Html.Partial("_SomePartial", new Microsoft.AspNet.Mvc.ViewFeatures.ViewDataDictionary(this.ViewData) { { "id", someInteger } });জন্য কাজ করার জন্য আমাকে এটি ব্যবহার করতে হয়েছিল। অন্য কারও যদি এই একই সমস্যা থাকে তবে আমি VS2015 DNX 4.5.1 ব্যবহার করছি।
মাইকটিভি

46

আমি নিজের অনুসন্ধান করার সময় আমি একক মানের জন্য সর্বাধিক সংক্ষিপ্ত পদ্ধতিটি সন্ধান করেছি, কেবলমাত্র একক স্ট্রিং পার করছি এবং স্ট্রিংকে মডেল হিসাবে সেট করে দেখছি।

আপনার আংশিক কলিং সাইডে

@Html.Partial("ParitalAction", "String data to pass to partial")

এবং এরপরে আংশিক দৃশ্যের সাথে মডেলটিকে বাঁধাই করুন

@model string

এবং এর মতো আংশিক দৃশ্যে এর মানটি ব্যবহার করে

@Model

আপনি অ্যারে, ইনট বা আরও জটিল ডেটা টাইপের মতো আরও জটিল ডেটা টাইপের সাথে অন্য ডেটাটাইপগুলির সাথে খেলতে পারেন।

আশা করি এটা সাহায্য করবে,


4
এ তো ঝরঝরে! ঠিক আমি যা চেয়েছিলাম ধন্যবাদ।
গৌতম জৈন

আমার আংশিকর জন্য আমার মডেলটির প্রয়োজন নেই, তবে আমার ভিউডাটা মডেলস্টেটের সমস্ত জিনিস সংরক্ষণ করার দরকার ছিল .. এটি কৌশলটি করেছে। আমার আংশিক দৃষ্টিতে, আমি এখনও ভিউ কনটেক্সট.ভিউডাটা.মোডেলস্টেট.কন্টেনসকি (@ মডেল.টোস্ট্রিং ())
দা_জোককার

এটি কোনও NullReferenceExceptionঅবজেক্টের রেফারেন্সটিকে কোনও অবজেক্টের উদাহরণে সেট না করে নিক্ষেপ করে রাখে , এটি বলছে যে Modelনਾਲ। কোন ধারনা?
ফেসপাম 42

15

এখানে একটি এক্সটেনশন পদ্ধতি যা কোনও অবজেক্টকে ভিউডাটাডিয়েশনারিতে রূপান্তরিত করে।

public static ViewDataDictionary ToViewDataDictionary(this object values)
{
    var dictionary = new ViewDataDictionary();
    foreach (PropertyDescriptor property in TypeDescriptor.GetProperties(values))
    {
        dictionary.Add(property.Name, property.GetValue(values));
    }
    return dictionary;
}

তারপরে আপনি এটিকে আপনার মতামতটিতে এভাবে ব্যবহার করতে পারেন:

@Html.Partial("_MyPartial", new
{
    Property1 = "Value1",
    Property2 = "Value2"
}.ToViewDataDictionary())

যা new ViewDataDictionary { { "Property1", "Value1" } , { "Property2", "Value2" }}সিনট্যাক্সের চেয়ে অনেক সুন্দর ।

তারপরে আপনার আংশিক দৃষ্টিতে আপনি ViewBagইনডেক্সযুক্ত বৈশিষ্ট্যগুলির পরিবর্তে গতিশীল অবজেক্ট থেকে বৈশিষ্ট্য অ্যাক্সেস করতে ব্যবহার করতে পারেন

<p>@ViewBag.Property1</p>
<p>@ViewBag.Property2</p>

এই ToViewDataDictionaryস্থিতিশীল পদ্ধতিটি আমার কোথায় রাখা উচিত ? আমি যেখানেই চেষ্টা করার চেষ্টা করি সেখানে একরকম সংকলক ত্রুটি পাই।
সিএসবা তোথ

2
@ সিসাবা এটি একটি এক্সটেনশন পদ্ধতি। কেবল এটিকে একটি স্ট্যাটিক ক্লাসে রাখুন এবং তারপরে আপনার দৃষ্টিতে সেই শ্রেণিটি উল্লেখ করুন।
ক্রিস হেইনেস

3

Asp.Net কোর জন্য আপনি আরও ভাল ব্যবহার

<partial name="_MyPartialView" model="MyModel" />

উদাহরণস্বরূপ

@foreach (var item in Model)
{
   <partial name="_MyItemView" model="item" />
}
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.