Одной из прелестей MVC является возможность использовать действия как для обычных веб-вызовов, так и для вызовов Ajax. Но при этом мне немного неудобно с моим кодом. Я хотел бы знать, что думают другие люди.
Итак, я хочу просмотреть детали элемента в списке. Я создал представление Details. Я также решил использовать hijaxing - если у пользователя включен Javascript, я хочу, чтобы форма Details была всплывающей. Так что для Details.aspx мне нужен полный html, но если это 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 и обычных вызовов.
Как вы пишете свои Ajax-звонки?
UPDATE
Clicktricity действительно имеет правильный ответ. Однако еще одно изменение заключается в том, что, поскольку два метода контроллера не могут иметь одинаковую сигнатуру, мне нужно написать код контроллера следующим образом:
public ActionResult Details(int id)
{
return View(GetModel());
}
[AjaxRequest]
[ActionName("Details")]
public ActionResult DetailsAjax(int id)
{
return PartialView(GetAjaxModel());
}