Мне интересно, как вы могли бы реализовать несколько действий формы при отправке формы в 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, который выполнял синтаксический анализ.
Я не использовал тег
, потому что для теги
.