Возьмите, например, следующий код для действия Edit в моем контроллере:
// POST: /Admin/Text/Edit/5
[HttpPost]
[ValidateInput(false)]
public virtual ActionResult Edit(TextViewModel editing)
{
if (!ModelState.IsValid)
return View(editing);
Text existing = _repository.Find(editing.Id);
if (TryUpdateModel(existing)) {
_repository.Update(existing);
if(Request.IsAjaxRequest())
return Content(bool.TrueString);
else
return RedirectToAction(pndng.Admin.Text.List());
}
else return View(editing);
}
Я хочу, чтобы это действие выполняло как классические (не AJAX form
), так и AJAX (jquery) POST. В случае AJAX POST очень вероятно, что запрос поступает из встроенной формы редактирования. В этом случае действие должно просто вернуть результат Content=Ok
. Если мы редактировали модель на странице формы и выполнили классический postback
, мы хотим перенаправить пользователя обратно в список содержимого (см. RedirectToAction()
).
Однако меня беспокоит пункт if..else
. Я хотел бы абстрагировать это в фильтр / атрибут действия. Я хотел бы оставить в вызове перенаправления (так как это по умолчанию), но иметь фильтр действий, чтобы воздействовать на него, если он обнаруживает, что запрос был фактически запросом AJAX, что означает остановку перенаправления и просто возврат ContentResult
или JsonResult
.
Также не стесняйтесь отвечать, если считаете, что мой рабочий процесс неправильный.