У меня есть представление ASP.NET MVC 3 с двумя формами, но они находятся в одном теге формы.
Не уверен, что это правильный подход, поэтому предложите, если есть лучшее решение.
У пользователя есть две опции на этой странице. Речь идет о подписке на новостную рассылку, и если у пользователя уже есть номер подписки, требуется только одна из «форм» для проверки.
Если у пользователя нет номера подписки, другая форма должна быть проверена.
Я знаю, что это может быть разработано намного более удобным для пользователя (и программистом), но это требование от клиента.
Моя проблема в том, что при отправке формы все поля, конечно, проверяются. Где-то мне нужно предоставить проверку, чтобы увидеть, заполнил ли пользователь поле SubscriptionNumber, а затем контролировать, какую «форму» проверять.
Есть ли у вас какие-либо предложения о том, как это сделать? Я, конечно, хотел бы сохранить это как можно более простым.
Вот мой взгляд Подписаться:
@model SubscribeNewsletterModel
@using (Html.BeginForm())
{
@Html.EditorFor(m => m.ExistingSubscriber)
@Html.EditorFor(m => m.NewSubscription)
@Html.ValidationSummary()
<input type="submit" />
}
Моя модель представления для этого вида выглядит следующим образом:
public class SubscribeNewsletterModel
{
public SubscribeNewsletterModel(SubscriptionModel subscriptionModel,
ExistingSubscriberModel existingSubscriberModel)
{
this.NewSubscription = subscriptionModel;
this.ExistingSubscriber = existingSubscriberModel;
}
// The models contains validation logic (attributes like Required, etc.)
public SubscriptionModel NewSubscription { get; set; }
public ExistingSubscriberModel ExistingSubscriber { get; set; }
}
И мой контроллер отвечает за обработку запроса POST. Это еще ничего не делает - только для проверки:
[HttpPost]
public ActionResult Subscribe(
[Bind(Prefix="NewSubscription")] SubscriptionModel newSubscriptionModel,
[Bind(Prefix="ExistingSubscriber")] ExistingSubscriberModel existingSubscriberModel)
{
var vm = new SubscribeNewsletterModel(newSubscriptionModel, existingSubscriberModel);
return View(vm);
}