アクションがAJAXと呼ばれてきた場合は、その後、JSONデータを返すと、通常のビュー戻らないかどうかをテストすることができます:もちろん
public ActionResult Index()
{
var model = FetchModel();
if (Request.IsAjaxRequest())
{
return Json(model, JsonRequestBehavior.AllowGet);
}
return View(model);
}
このif
があなたのコントローラのアクションが醜いなります。複数のアクションで、このロジックの繰り返しを避けるためにアクションフィルタを使用することがはるかに良いでしょう。そして、
public class MyFilterAttribute : ActionFilterAttribute
{
public override void OnActionExecuted(ActionExecutedContext filterContext)
{
base.OnActionExecuted(filterContext);
if (filterContext.HttpContext.Request.IsAjaxRequest())
{
var viewResult = filterContext.Result as ViewResultBase;
if (viewResult != null)
{
if (viewResult.Model != null)
{
filterContext.Result = new JsonResult
{
Data = viewResult.Model,
JsonRequestBehavior = JsonRequestBehavior.AllowGet
};
}
}
}
}
}
そして、この属性を使用してコントローラを飾る:
[MyFilter]
public ActionResult Index()
{
var model = FetchModel();
return View(model);
}
おかげのようなものを表示します。しかし、これは、私が避けたいサーバーへの2回の往復を持ちます。私はListアクションを介してJsonデータを返し、テンプレートプラグインを介して表示したいと思います。どんな助け? – Ashish