【发布时间】:2014-06-11 11:28:40
【问题描述】:
我正在创建一个单页应用程序。我有一个名为 ControllerBase 的抽象类,我所有的控制器都继承自它。
我有一个名为“应用程序”的控制器,其中包含一个名为“容器”的操作。此视图包含应用程序视图。
我希望它的工作方式是:如果请求是 AJAX,则从控制器返回 ActionResult。如果请求不是 AJAX,则调用“应用程序”控制器并呈现操作“容器”,发送路由数据,以便客户端负责进行 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);
}
}
}
这是应用程序控制器。
public class ApplicationController : ControllerBase
{
public ActionResult Container(string controller, string action, string id)
{
if (controller.IsEqualTo("application")) controller = null;
if (action.IsEqualTo("container")) action = null;
return View(new RequestModel(controller, action, id));
}
}
这里是任何其他控制器,如果它不是 AJAX,则必须通过应用程序控制器捕获和呈现对其发出的任何请求。
public class BusinessController : ControllerBase
{
public ActionResult Index()
{
return View();
}
}
当我路由到以下路由:/Business/Index 时,OnActionExecuting 规则工作正常,但出来的视图不会呈现“容器”视图,而是呈现“索引”视图。我不知道我做错了什么。
【问题讨论】:
标签: c# asp.net-mvc