我正在关注一本名为“Asp.Net MVC4 in Action”的书。现在他们说,我们可以使用操作方法选择器来区分它,而不是依赖我们代码中的 if 语句来检查请求是否是 Ajax。他们所做的是AcceptAjaxAttribute
使用以下代码创建一个类
using System;
using System.Reflection;
using System.Web.Mvc;
namespace CustomAjax
{
[AttributeUsage(AttributeTargets.Class | AttributeTargets.Method)]
public class AcceptAjaxAttribute : ActionMethodSelectorAttribute
{
public override bool IsValidForRequest(ControllerContext controllerContext, MethodInfo methodInfo)
{
return controllerContext.HttpContext.Request.IsAjaxRequest();
}
}
}
以及之前看起来像这样的控制器中的功能
var speaker = _repository.FindSpeaker(id);
if(Request.IsAjaxRequest())
{
return Json(speaker, JsonRequestBehaviour.AllowGet);
}
return View();
已经变成了这样的东西
[AcceptAjax]
public ActionResult Details(int id)
{
var speaker = _repository.FindId(id);
return Json(speaker, JsonRequestBehavior.AllowGet);
}
[ActionName("Details")]
public ActionResult Details_NonAjax(int id)
{
var speaker = _repository.FindId(id);
return View();
}
老实说,我不知道正在做什么,也不知道为什么我们创建了新类并使用了 [AcceptAjax] 东西。有人可以向我解释一下。