В MVC как сделать поле в модели необязательным после того, как флажок установлен? - PullRequest
0 голосов
/ 03 февраля 2011

У меня есть страница, написанная с использованием .NET MVC.В модели для Person с именем PersonModel у меня есть это определение, которое требует от пользователя ввода некоторого текста в поле фамилии:

    <DisplayName("Last Name"), Required()> _
    Public Property LastName() As String
        Get
            Return _LastName
        End Get
        Set(ByVal value As String)
            _LastName = value
        End Set
    End Property

В форме есть флажок, который пользователь может проверить, чтобы сделатьнекоторые другие вещи.Есть ли способ, используя JQuery предпочтительно, чтобы изменить это поле Фамилия, чтобы быть необязательным?Если я не использую JQuery, я открыт для других предложений, но так как я делаю много вещей, когда этот флажок установлен в любом случае, я надеялся, что смогу добавить эту логику туда.Вот пример того, что я делаю, когда этот флажок установлен, чтобы продемонстрировать ...

function doOwnerBusiness (event) {

        if ($(this).is(':checked')) {

         $('input[name="People_1__LastName"], label[for="People[1]_LastName"]').hide();​
         $("#People_1__LastName").hide();
         $("#People_1__LastName").val("");
         $("#People_1__LastName :input").attr('disabled', true);               


            $('input[name="People[1]_Suffix"], label[for="People[1]_Suffix"]').hide();​
            $("#People_1__Suffix").attr('disabled', true);
            $('#People_1__Suffix')[0].selectedIndex = 0;
            $('#People_1__Suffix').hide();

       }

        else {

       $('input[name="People_1__LastName"], label[for="People[1]_LastName"]').show();          
            $("#People_1__LastName").show();
            $('#People_1__LastName :input').attr('disabled', false);

        }
    }

Любая помощь с этим будет оценена людьми.

Спасибо

Уильям

Вот как я объявляю свой флажок, а также часть функции, в которой я пытаюсь проверить, проверен ли он или нет ...

                    <%=Html.CheckBoxFor(Function(model) model.FirstNameAsBusiness)%>
                    <%=Html.LabelFor(Function(model) model.FirstNameAsBusiness)%>



Function Nominate(ByVal m As NominationModel, ByVal captchaValid As Boolean) As ActionResult


    If Not m.FirstNameAsBusiness.checked AndAlso String.IsNullOrEmpty(m.lastnametext) Then
        ModelState.AddModelError("LastName", "Last Name field is required if you don't yada yada...")
        Return View()
    End If

1 Ответ

1 голос
/ 03 февраля 2011

Краткий ответ: нет. Вы не можете обойти DataAnnotation с помощью вызова jQuery.

Технически, поле Фамилия не обязательно . Итак, я бы удалил DataAnnotation for Required, а затем на бэкэнде, когда пользователь отправляет форму, проверял, что значение поля существует, когда флажок не установлен. Если условие не проходит, выдается ошибка ModelState для этого поля и происходит перенаправление на страницу. (извиняюсь за c #):

public ActionResult Index(HomeIndexModel form)
{
    if (!form.Checked && string.IsNullOrEmpty(form.LastName))
    {
        ModelState.AddModelError("LastName", "Last Name field is required if you don't yada yada...");
        return View();
    }

    //conditional requirement passed...
}

Если вы хотите немного поразвлечься, вы можете проверить эту ветку, хотя все предложения здесь также относятся к серверу: ASP.NET MVC Условная проверка

...