必需如果使用jquery进行验证未失败

时间:2019-05-15 12:58:35

标签: jquery asp.net-mvc jquery-validate unobtrusive-validation foolproof-validation

我的表单在失败时会不断返回$(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-dependentvalue

,并且每个数据集都有正确的值。

有效性:valueMissing为false,即使在我的控制器中将viewModel返回时,IsClicked的值为true。

与验证器寻找IsClicked值为“ True”的值有关吗,但我只是传回true?如果是这样-我该如何解决?还是完全其他的东西?

编辑/更新:所以我没有得到解决。。。我使用了以下变通办法,以防任何人使用它:

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();
        });
    }

0 个答案:

没有答案