MVC的优点之一是能够对普通web调用和Ajax调用使用动作。但是这样做,我对我的代码有点不舒服。我想知道别人怎么想。
public ActionResult Details(int id)
{
if (Request.IsAjaxRequest())
{
return PartialView(GetAjaxModel());
}
else
return View(GetModel());
}
它可以工作,但每当我有一个巨大的“如果”语句围绕着我的整个代码,它困扰着我。我怎样才能摆脱它和/或使代码更好?
我也可以编写一个名为AjaxDetails的单独方法,但我真正想写的是:
public ActionResult Details(int id)
{
return View(GetModel());
}
[Ajax]
public ActionResult Details(int id)
{
return View(GetAjaxModel());
}
但据我所知,没有过滤Ajax和普通调用的属性。
更新
Clicktricity确实有正确的答案。然而,另一个变化是,由于两个控制器方法不能具有相同的签名,因此我需要这样编写控制器代码:
public ActionResult Details(int id)
{
return View(GetModel());
}
[AjaxRequest]
[ActionName("Details")]
public ActionResult DetailsAjax(int id)
{
return PartialView(GetAjaxModel());
}