আমি এমন একটি ভারসাম্য তৈরি করেছি যা মনে হচ্ছে বেশ ভালভাবে কাজ করছে। আমি ক্রিয়া নাম অনুসন্ধান, দেখার জন্য ইত্যাদি জন্য আলাদা নিয়ামকের প্রসঙ্গে স্যুইচ করার প্রয়োজনীয়তা পেয়েছি এটি বাস্তবায়নের জন্য, আমি এর জন্য একটি নতুন এক্সটেনশন পদ্ধতি তৈরি করেছি HtmlHelper
:
public static IDisposable ControllerContextRegion(
this HtmlHelper html,
string controllerName)
{
return new ControllerContextRegion(html.ViewContext.RouteData, controllerName);
}
ControllerContextRegion
হিসাবে সংজ্ঞায়িত করা হয়:
internal class ControllerContextRegion : IDisposable
{
private readonly RouteData routeData;
private readonly string previousControllerName;
public ControllerContextRegion(RouteData routeData, string controllerName)
{
this.routeData = routeData;
this.previousControllerName = routeData.GetRequiredString("controller");
this.SetControllerName(controllerName);
}
public void Dispose()
{
this.SetControllerName(this.previousControllerName);
}
private void SetControllerName(string controllerName)
{
this.routeData.Values["controller"] = controllerName;
}
}
ভিউয়ের মধ্যে এটি যেভাবে ব্যবহৃত হয় তা নিম্নরূপ:
@using (Html.ControllerContextRegion("Foo")) {
// Html.Action, Html.Partial, etc. now looks things up as though
// FooController was our controller.
}
এর জন্য অযাচিত পার্শ্ব প্রতিক্রিয়া থাকতে পারে যদি আপনার কোডটির জন্য controller
রুট উপাদানটি পরিবর্তন না করা প্রয়োজন তবে আমাদের কোডটিতে এখন পর্যন্ত এই পদ্ধতির কোনও নেতিবাচক বলে মনে হচ্ছে না।