Управление полями для проверки в зависимости от ввода пользователя - PullRequest
0 голосов
/ 12 июля 2011

У меня есть представление 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);
}

1 Ответ

0 голосов
/ 12 июля 2011

Исходя из вашего условия: «Речь идет о подписке на новостную рассылку, и, если у пользователя уже есть номер подписки, необходимо подтвердить только одну из« форм ». Если у пользователя нет номера подписки, другая форма должна быть подтверждена. "

Создайте параметр в вашем представлении, который будет отправлен обратно в контроллер, где вы проверяете свою форму, и используйте этот параметр, чтобы определить, что будет проверяться. Вам придется работать с

ModelState

Вы можете удалить свойства, которые вы не хотите проверять по ключу.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...