Мне интересно, как вы можете реализовать несколько действий с формами при отправке формы в asp.net mvc 3 RC.
Если я редактирую пользователя, например, я хотел бы иметьпанель действий со следующими кнопками:
«Сохранить» |"Сохранить и закрыть" |«Отмена»
Сохранить - Отправка формы и сохранение, возвращение вас на экран редактирования.Может быть легко реализована в виде стандартной кнопки ввода / вывода.Здесь нет ничего особенного.
Код контроллера для этого может выглядеть как
public ActionResult Edit(UserViewModel model)
{
...
return RedirectToAction("Edit", model.Id");
}
Отмена - просто возвращает вас к предыдущему экрану.Я думал об использовании тега привязки для этого.
<a href="@Request.UrlReferrer" class="button">Cancel</a>
Но я нахожусь в тупике от того, как реализовать "Сохранить и закрыть" , когда вам нужно отправить те же данные формы.Возможно, мне было интересно иметь закрываемый закрывающий параметр?
public ActionResult Edit(UserViewModel model, bool? close)
{
...
return close.GetValueOrDefault(false) ? RedirectToAction("Index", model.Id" : RedirectToAction("Edit", model.Id");
}
Но как мне передать этот дополнительный параметр вместе с формой в этом случае?
Если возможно, я бы хотелесть одно действие формы для обработки отправки, как в приведенном выше макете.
Мне также интересно, если кто-нибудь еще придумал хорошую модель взаимодействия с пользователем для этой идеи.
Solution
В итоге я воспользовался предложением Омара ниже, но вместо передачи строки я взял перечисление, поэтому мне не нужно проверять строки во всех моих контроллерах.
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)
....
}
Поскольку я хотел более дружественный текст «Сохранить и закрыть» на кнопке <input>
, но хотел использовать перечисление, я реализовал пользовательский ModelBinder для FormAction, который выполнял синтаксический анализ.
Я не использовалтег <button>
, поскольку для тегов <input>
уже была создана тема.