Обязательно, если проверка не завершилась с помощью jquery - PullRequest
0 голосов
/ 15 мая 2019

Моя форма продолжает возвращать $ (form) .valid () = true, когда она должна давать сбой.

Моя ViewModel:

public class SearchProvidersViewModel
{
    public bool IsClicked { get; set; }

    [RequiredIf("IsClicked", true, ErrorMessage ="IsClicked is required")]
    public string Name { get; set; }
}

Мой просмотр:

@using (Html.BeginForm("Search", "Home", FormMethod.Post, new { @id = "SearchForm" }))
        {

<label class="btn btn-primary" id="IsClicked">
                            @Html.RadioButtonFor(x => x.IsClicked, true) Name
                        </label>

@Html.TextBoxFor(x => x.Name, new { @class = "form-control" })
                        @Html.ValidationMessageFor(x => x.Name, "", new { 
 @class = "text-danger" })

<button id="btnSearch" type="submit" class="btn btn-success">Search</button>
}

мой javascript:

 $(document).on("click", "#btnSearch", function (e) {
 $("#SearchForm").validate();
        if ($("#SearchForm").valid()) {
//post form to controller
}

Форма всегда публикуется наконтроллер.Если я запускаю $ ("# SearchForm"). Validate () в консоли, я вижу, что у currentForm есть input # Name, и это имеет правильные атрибуты:

data-val-requiredif,

data-val-requiredif-зависящийprpoperty,

data-val-requiredif-variable -value

и набор данных имеет правильные значения для каждого.

validity: valueMissing имеет значение false, хотя в моем контроллере, когда viewModel передается обратно, значение для IsClicked равно true.

Это как-то связано с тем, что валидатор ищет значение IsClicked, равное "True", но я просто возвращаю значение true?Если так - как я могу это исправить?Или это что-то совсем другое?

EDIT / UPDATE: Так что я не получил исправления для этого ... Я использовал следующий обходной путь, если он кому-нибудь пригодится:

var form = $("#SearchForm");
            validator = $(form).validate();
            validator.settings.showErrors = showErrors;

            var errorMessage = "This field is required";
            var isValid = false;
            if ($("#IsClicked").hasClass("active")) {
                if ($("#Name").val() == "") {
                    validator.showErrors({
                    "Name": errorMessage
                    });
                }
                else {
                    isValid = true;
                }
            }

if (isValid) {
// submit form
                }

function showErrors(errorMessage, errormap, errorlist) {
            var val = this;
            errormap.forEach(function (error, index) {
            val.settings.highlight.call(val, error.element, 
val.settings.errorClass, val.settings.validClass);
            $(error.element).siblings("span.field-validation-valid, span.field-validation-error").html($("<span></span>").html(error.message)).addClass("field-validation-error").removeClass("field-validation-valid").show();
        });
    }
...