我正在創建單個頁面應用程序。我有一個名爲ControllerBase的抽象類,並且我的所有控制器都從它繼承。無法從OnActionExecuting中的其他控制器返回視圖
我有一個名爲'Application'的控制器,其中包含一個名爲'Container'的動作。該視圖包含應用程序視圖。
我希望它的工作方式是:如果請求是AJAX,則從控制器返回ActionResult。如果請求不是AJAX,則調用'Application'控制器並呈現動作'Container',發送路由數據,以便客戶端負責使AJAX調用構建頁面。
這裏是控制器的基礎。
public class ControllerBase : Controller
{
protected override void OnActionExecuting(ActionExecutingContext filterContext)
{
var request = filterContext.HttpContext.Request;
// If the request is AJAX, let it go through
if (request.Headers["X-Requested-With"].IsEqualTo("xmlhttprequest"))
{
base.OnActionExecuting(filterContext);
}
// If the request is not AJAX, then the response needs to be modified.
else
{
// This is the controller that contains the single-page application view.
var applicationController = new ApplicationController();
applicationController.ControllerContext =
new ControllerContext(ControllerContext.RequestContext, applicationController);
// Render the single page application and let it take care of the result
filterContext.Result = applicationController
.Container(filterContext.RouteData.Values["Controller"].ToString(),
filterContext.RouteData.Values["Action"].ToString(), null);
}
}
}
這裏是應用程序控制器。
3210這裏是任何其他控制器,其中向它提出的任何請求都必須被捕獲並通過應用程序控制器呈現,如果它不是AJAX。
public class BusinessController : ControllerBase
{
public ActionResult Index()
{
return View();
}
}
當我下面的路線路線:/商務/指數,OnActionExecuting規則做工精細,但出來不呈現「容器」視圖的視圖,它呈現的「索引」視圖。我無法弄清楚我做錯了什麼。