【发布时间】:2014-02-27 15:30:30
【问题描述】:
我的表单上有一个必填字段。当用户使用 jQuery UI 自动完成从文本框中选择一个值时,会填充隐藏字段。我已将表单验证器设置为不忽略隐藏字段,以便验证真正起作用。验证确实有效,但是当用户从自动完成中选择所需的选项,然后填充隐藏字段时,验证消息将不会清除,并且会在表单发布之前显示。一旦设置了隐藏字段,我是否需要手动调用 $('form').validate() 或其他东西,或者有没有办法在没有任何额外的 javascript 代码的情况下清除它?
我的视图模型:
public class IndexViewModel
{
public string SchoolName { get; set; }
[Required]
public int SchoolId { get; set; }
}
我的观点:
@model IndexViewModel
@using (Html.BeginForm())
{
<p>
@Html.LabelFor(m => m.SchoolName)
@Html.TextBoxFor(m => m.SchoolName)
@Html.HiddenFor(m => m.SchoolId)
@Html.ValidationMessageFor(m => m.SchoolId)
</p>
<p>
<input type="submit" />
</p>
}
@section scripts {
<script>
$(function () {
// stop validator from ignoring hidden fields
var validator = $('form').data('validator');
validator.settings.ignore = "";
// schoolname autocomplete
$('#SchoolName').autocomplete({
minLength: 1,
source: [
{ label: "ABC University", value: "1" },
{ label: "Oklahoma University", value: "2" },
{ label: "Texas University", value: "3" }
],
select: function (e, ui) {
e.preventDefault();
$('#SchoolId').val(ui.item.value);
$('#SchoolName').val(ui.item.label);
}
});
});
</script>
}
提前致谢。
编辑
Sparky,这里是渲染的 HTML:
<form action="/" method="post">
<p>
<label for="SchoolName">SchoolName</label>
<input id="SchoolName" name="SchoolName" type="text" value="" />
<input data-val="true" data-val-number="The field SchoolId must be a number." data-val-required="The SchoolId field is required." id="SchoolId" name="SchoolId" type="hidden" value="" />
<span class="field-validation-valid" data-valmsg-for="SchoolId" data-valmsg-replace="true"></span>
</p>
<p>
<input type="submit" />
</p>
</form>
【问题讨论】:
-
我认为this 会帮助你。
-
您应该向我们展示浏览器看到的表单的渲染 HTML。
标签: jquery asp.net-mvc-4 jquery-validate jquery-ui-autocomplete asp.net-mvc-validation