ฉันได้สร้างวิธีแก้ปัญหาที่ดูเหมือนว่าจะทำงานได้ดี ฉันพบว่าจำเป็นต้องเปลี่ยนไปใช้บริบทของตัวควบคุมที่แตกต่างกันสำหรับการค้นหาชื่อการกระทำ, การค้นหาการดูเป็นต้นเมื่อต้องการใช้สิ่งนี้ฉันได้สร้างวิธีการขยายใหม่สำหรับ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ส่วนประกอบเส้นทางจะไม่เปลี่ยนแปลง แต่ในรหัสของเราจนถึงขณะนี้ดูเหมือนจะไม่เป็นเชิงลบต่อวิธีการนี้