Я хочу сделать свои действия в контроллерах более гибкими. Я имею в виду, что обычное действие обычно возвращает:
...
return View("someView");
или, например, если Ajax:
...
return Json(new {result="ok"});
Что я хочу, так это сделать мои Действия более «многоцелевыми». Например, я создал слой пользовательского интерфейса на основе простых не-Ajax-запросов, затем решил сделать его более удобным для пользователей и добавил немного Ajax. Таким образом, я должен немного исправить действия, чтобы вернуть Джсона.
Самый простой (и, вероятно, худший) способ избежать подобных вещей - написать следующий код в каждом (или почти каждом) действии:
if (Request.IsAjaxRequest) {
return Json(new {result="ok"});
}
else {
return View("someView")
}
Но, конечно, такой метод полностью противоречит принципам DRY.
Итак, я хочу найти хорошую практику для достижения этого «многоцелевого».
Один из способов - написать такой вспомогательный метод, как этот:
public ActionResult CheckForAjax(ActionResult result)
{
return ActionResult(result, Json(new {result="ok"}));
}
public ActionResult CheckForAjax(ActionResult result, Json json)
{
if (Request.IsAjaxRequest) {
return json;
}
else {
return result;
}
}
Так я могу вызвать помощников в действиях:
return CheckForAjax(View(...));
или
return CheckForAjax(View(...), Json(new {myCustomJson="hi"});
Но я не знаю, хороший ли это способ или просто изобретать велосипед :)
Может быть, лучше использовать фильтры действий? Но я не знаю, как передать пользовательский Json в этот фильтр ...
Спасибо за любые предложения