मैंने एक वर्कअराउंड बनाया है जो बहुत अच्छी तरह से काम कर रहा है। मुझे एक्शन नाम लुकअप, व्यू लुकअप आदि के लिए एक अलग कंट्रोलर के संदर्भ में स्विच करने की आवश्यकता महसूस हुई। इसे लागू करने के लिए, मैंने इसके लिए एक नया एक्सटेंशन बनाया 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
रूट घटक को बदलने की आवश्यकता नहीं है, लेकिन हमारे कोड में अभी तक इस दृष्टिकोण के लिए कोई नकारात्मक नहीं लगता है।