Моя форма продолжает возвращать $ (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();
});
}