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