2

我在 MVC3 应用程序中使用不显眼的验证。我有一个带有 [Required] 验证器的下拉列表。这是我的模型(简化):

[Required(ErrorMessage = "Please select From Employee.")]
public string CurrentEmpId { get; set; }       

public List<SelectListItem> CurrentEmp { get; set; }

这是我的观点(简化):

@Html.LabelFor(m => m.CurrentAdvisers)
@Html.DropDownListFor(m => m.CurrentEmpId, new SelectList(Model.CurrentEmp, "Value", "Text", Model.CurrentEmpId), "Please Select")
@Html.ValidationMessageFor(m => m.CurrentEmpId)

现在这一切都在工作,直到我将下拉列表放入 JQuery UI 组合框 jqueryui.com/demos/autocomplete/#combobox(参见最后一个参数)。

@Html.DropDownListFor(m => m.CurrentEmpId, new SelectList(Model.CurrentEmp, "Value", "Text", Model.CurrentEmpId), "Please Select", new { @class = "selAutoComplete" })

当我按下提交按钮并且没有选择任何内容时,验证会触发。有一件烦人的事情是行不通的。当一个错误被触发时,如果我通过在下拉列表中选择一些东西来纠正错误,然后标签出来,错误不会消失。当它是一个普通的选择框时,确实发生了这种情况。

<select>这可能与现在隐藏并被 JQuery 替换的事实有关<input>,但我不知道如何触发正确的 js 以删除错误消息。

任何帮助将不胜感激!

提前致谢

4

2 回答 2

0

根据您的描述,当您从 jQ-UI 组合框跳出时,似乎没有触发选择控件的验证。您可以尝试的一件事是在您离开组合框后立即在选择控件上强制一个blur或事件,例如:change

$('#CurrentEmpId').next('input').blur(function(e) {
    $('#CurrentEmpId').change();
    //$('#CurrentEmpId').blur();    // try this line if the above does not work
});
于 2011-09-01T08:06:38.803 回答
0

经过进一步研究,我发现以下解决方案可以正常工作:

如何使用jQuery远程验证依赖于表单中另一个字段的字段?

$("select.selAutoComplete").change(function() {
    $(this).removeData("previousValue"); //clear cache when changing group
    $("form").data('validator').element('select.selAutoComplete');
});

@William Niu - 我尝试了你的解决方案,但我不明白为什么这不起作用。感谢您花时间回答。

我希望这对其他人有帮助。

于 2011-09-05T14:29:15.177 回答