Как лучше всего реализовать Сохранить | Сохранить и закрыть | Отмена действий формы в ASP.NET MVC 3 RC

Мне интересно, как вы могли бы реализовать несколько действий формы при отправке формы в asp.net mvc 3 RC .

Если я, например, редактирую пользователя, я хотел бы иметь панель действий со следующими кнопками:

«Сохранить» | «Сохранить и закрыть» | «Отмена»

Сохранить - отправляет форму и сохраняет, возвращая вас к экрану редактирования. Может быть легко реализована как стандартная кнопка ввода / отправки. Здесь нет ничего особенного.

Код контроллера для этого может выглядеть как

public ActionResult Edit(UserViewModel model)
{
  ...
  return RedirectToAction("Edit", model.Id");
}

Отмена - просто возвращает вас к предыдущему экрану. Я подумывал использовать для этого якорь.

<a href="@Request.UrlReferrer" class="button">Cancel</a>

Но я ' m не понял, как реализовать «Сохранить и закрыть» , когда вам нужно отправить те же данные формы. Мне было интересно, может быть, иметь закрывающий параметр, допускающий значение NULL?

public ActionResult Edit(UserViewModel model, bool? close)
{
  ...
  return  close.GetValueOrDefault(false) ? RedirectToAction("Index", model.Id" : RedirectToAction("Edit", model.Id");
}

Но как мне отправить этот дополнительный параметр вместе с формой в этом случае?

Если возможно, я хотел бы иметь одно действие формы для обработки отправки как в приведенном выше макете.

Мне также интересно, придумал ли кто-нибудь еще хорошую модель взаимодействия с пользователем вокруг этой идеи.

Решение

В итоге я использовал предложение Омара ниже, но вместо того, чтобы передать string Я взял перечисление, поэтому мне не нужно проверять строки во всех моих контроллерах.

public ActionResult Edit(UserViewModel model, FormAction actionType)
{
  // pre-check
  if (actionType == FormAction.Cancel)
     // just return user to previous view and don't save.

  // Save code

  if (actionType == FormAction.Save)
     return ...
  else if (actionType == FormAction.SaveAndClose)
     ....
}

Потому что мне нужен более удобный текст «Сохранить и закрыть» в , но хотел использовать перечисление. Я реализовал собственный ModelBinder для FormAction, который выполнял синтаксический анализ.

Я не использовал тег

13
задан Joshua Hayes 25 November 2010 в 01:46
поделиться