У меня есть мини-форма, состоящая из всех полей выбора и списков флажков.MVC3: Проверка клиента
У меня есть аннотации данных в уже созданной модели. Поэтому, если я отправлю форму (без javascript включен), ModelState.IsValid
работает так, как предполагается.
Но при проверке клиента у меня возникают проблемы. У меня есть ненавязчивая проверка jquery, но когда я делаю $("#form").valid()
, он всегда возвращает true.
Я не уверен, как настроить это и проверить условия. Например, у меня есть checkboxlist, который по умолчанию ничего не проверял. Поэтому, если ничего не проверено, .valid()
должен возвращать false. Кроме того, у 2 выпадающих списков есть опция «выбрать» в качестве первой, но jquery по-прежнему возвращает значение. Серверная сторона ModelState.IsValid
работает для обоих.
Ниже приведен пример:
@using (Html.BeginForm("index", "home", FormMethod.Post, new { @id = "miniForm" })) {
@Html.ValidationSummary(true)
@Html.AntiForgeryToken()
<div>
@Html.LabelFor(m => m.NinjaType)
@Html.DropDownListFor(m => m.NinjaType, Model.NinjaTypeList) // First value is '0'. Rest of the list is of type STRING
</div>
/// following is the rendered html code as i created a helper for it which i've omitted in this example
<ul>
<li><input type="checkbox" id="poo1" name="pie" value="one" />one</li>
<li><input type="checkbox" id="poo2" name="pie" value="two" />two</li>
<li><input type="checkbox" id="poo3" name="pie" value="three" />three</li>
</ul>
<input type="submit" id="submitButton" />
}
Если это помогает, это действие POST-контроллер:
public ActionResult Index(SuperDooperNinjaViewModel m)
{
if (this.ModelState.IsValid)
return Redirect("win");
else
return Redirect("fail");
}
Я думал, что я хотел бы сделать это по старинке на $('#submitButton').click();
, но я чувствую, что может быть лучший способ сделать это. Другой способ, о котором я думал, превращает его в форму Ajax. Поэтому в ответе на стороне сервера вместо Redirect("fail");
я возвращаю JsonResult
.
Итак, что было бы лучшим путем для проверки этой формы?
- -й значение NinjaType должно не будет '0'
- По крайней мере один флажка необходимо проверять.
Заранее спасибо
UPDATE:
ViewModel:
public class SuperDooperViewModel
{
[Required]
public string NinjaType {get;set;}
public IEnumerable<SelectItemList> { get;set; }
[Required]
public string[] pie {get;set;} // checkbox
public IEnumerable<string> PieList { get;set; } // list of values for checkbox
}
В JQuery, я проверяю это так:
$("#submitButton").click(function(e) {
e.preventDefault();
if ($("#miniForm").valid())
alert("valid");
else
alert("fail");
});
@CjCoax, что делает этот скрипт для проверки? –
@ Darin Dimitrov, извинения Я имел в виду «~/Scripts/jquery.validate.unobtrusive.js» – CjCoax