「Asp.Net MVC4 in Action」という本をフォローしています。そして今、ある時点で、リクエストが Ajax であるかどうかを確認するためにコード内の if ステートメントに依存する代わりに、アクション メソッド セレクターを使用してそれを区別できると言われています。そして、彼らが行ったことは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] を使用したのかわかりません。誰かが私に説明してくれるかもしれません。