সম্ভবত, এর প্রাথমিক ব্যবহারের ক্ষেত্রে কন্ট্রোলারের সমস্ত (বা সংখ্যাগরিষ্ঠ) ক্রিয়াকলাপের জন্য ভিউতে একটি বেস মডেল পাওয়া।
এটি দেওয়া, আমি এই উত্তরগুলির বেশ কয়েকটিটির সংমিশ্রণটি ব্যবহার করেছি, কলিন বেকনের উত্তরের প্রাথমিক পিগি সমর্থন।
এটি সঠিক যে এটি এখনও নিয়ন্ত্রক যুক্তিযুক্ত কারণ আমরা একটি ভিউতে ফিরে আসার জন্য একটি ভিউমডেলকে পপুলেট করছি। সুতরাং এটি রাখার সঠিক জায়গাটি নিয়ামকের মধ্যে রয়েছে।
আমরা সব কন্ট্রোলারে এটি ঘটতে চাই কারণ আমরা এটি লেআউট পৃষ্ঠার জন্য ব্যবহার করি। আমি এটি আংশিক দর্শনের জন্য ব্যবহার করছি যা বিন্যাস পৃষ্ঠায় রেন্ডার করা হয়।
আমরা এখনও দৃ strongly়ভাবে টাইপ করা ভিউমোডেলের অতিরিক্ত সুবিধাটি চাই
সুতরাং, আমি একটি বেসভিউমোডেল এবং বেসকন্ট্রোলার তৈরি করেছি। সমস্ত ভিউমোডেলস নিয়ন্ত্রকগণ যথাক্রমে বেসভিউমোডেল এবং বেসকন্ট্রোলারের কাছ থেকে উত্তরাধিকারী হবেন।
কোড:
BaseController
public class BaseController : Controller
{
protected override void OnActionExecuted(ActionExecutedContext filterContext)
{
base.OnActionExecuted(filterContext);
var model = filterContext.Controller.ViewData.Model as BaseViewModel;
model.AwesomeModelProperty = "Awesome Property Value";
model.FooterModel = this.getFooterModel();
}
protected FooterModel getFooterModel()
{
FooterModel model = new FooterModel();
model.FooterModelProperty = "OMG Becky!!! Another Awesome Property!";
}
}
এই এসও পোস্ট থেকে নেওয়া হিসাবে অন্যাকশনএক্সেকটেডের ব্যবহারটি নোট করুন
HomeController
public class HomeController : BaseController
{
public ActionResult Index(string id)
{
HomeIndexModel model = new HomeIndexModel();
// populate HomeIndexModel ...
return View(model);
}
}
BaseViewModel
public class BaseViewModel
{
public string AwesomeModelProperty { get; set; }
public FooterModel FooterModel { get; set; }
}
HomeViewModel
public class HomeIndexModel : BaseViewModel
{
public string FirstName { get; set; }
// other awesome properties
}
FooterModel
public class FooterModel
{
public string FooterModelProperty { get; set; }
}
Layout.cshtml
@model WebSite.Models.BaseViewModel
<!DOCTYPE html>
<html>
<head>
< ... meta tags and styles and whatnot ... >
</head>
<body>
<header>
@{ Html.RenderPartial("_Nav", Model.FooterModel.FooterModelProperty);}
</header>
<main>
<div class="container">
@RenderBody()
</div>
@{ Html.RenderPartial("_AnotherPartial", Model); }
@{ Html.RenderPartial("_Contact"); }
</main>
<footer>
@{ Html.RenderPartial("_Footer", Model.FooterModel); }
</footer>
< ... render scripts ... >
@RenderSection("scripts", required: false)
</body>
</html>
_Nav.cshtml
@model string
<nav>
<ul>
<li>
<a href="@Model" target="_blank">Mind Blown!</a>
</li>
</ul>
</nav>
আশা করি এটি সাহায্য করবে।