我正在设计一个网站,并试图与关闭或打开的javascript兼容.
我有一个名为以下的控制器动作…
public RedirectToRouteResult AddWorkAssignment(int id)
{
// delegate the work to add the work assignment...
return RedirectToAction("Index","Assignment");
}
和我的jQuery我做一个帖子
$('#someButton').click(function() {
var id = $('#whereTheIDIs').val();
$.post('/Assignment/AddWorkAssignment/' + id);
return false;
});
但是控制器上的RedirectToAction会做到这一点….如何停止重定向发生,或者如何构造控制器和页面来处理此问题,因为我希望在关闭javascript的情况下进行重定向.
最佳答案
将您的控制器更改为如下所示:
public ActionResult AddWorkAssignment(int id)
{
// do work to add the work assignment....
if (Request.IsAjaxRequest())
return Json(true);
return RedirectToAction("Index","Assignment");
}
您也可以创建自己的过滤器属性…非常类似于AcceptVerbs属性.
高温处理
查尔斯
编辑:AjaxRequest ActionMethodSelectorAttribute属性
从here开始
public class AjaxRequest : ActionMethodSelectorAttribute
{
public override bool IsValidForRequest(ControllerContext controllerContext,System.Reflection.MethodInfo methodInfo)
{
if (controllerContext == null)
throw new ArgumentNullException("controllerContext");
return controllerContext.HttpContext.Request.IsAjaxRequest();
}
}
然后您的控制器:
public RedirectToRouteResult AddWorkAssignment(int id)
{
// do work to add the work assignment....
return RedirectToAction("Index","Assignment");
}
[AjaxRequest]
public JsonResult AddWorkAssignment(int id)
{
// do work to add the work assignment....
return Json(true);
}