使用Select2 ASP.NET MVC时,使验证不引人注目



选择转换为select2的框,请勿自动与ASP.NET MVC Framework中的不引人注目的验证机制集成。
例如,在包含常规选择框的表单上(根据模型定义标记),在选择框中未选择选项的情况下提交表格,将导致选择框的边框和背景采用红色的颜色,通过使用 @html.validationmessagefor,错误消息(如果有)可以显示在框旁边。但是,如果选择框转换为select2组件,则提到的功能都不再起作用了。甚至验证错误消息也不会显示。
似乎甚至没有显示验证错误消息的原因,是因为select2更改了原始选择框的display css属性为none(display:none),我猜《不引人注目的验证脚本》不会打扰生成不可见的错误消息字段。

有任何想法/解决方案?

这个问题并不是针对select2的特定特定的,而是针对jQuery Unbrotrusive验证器。

您可以按照此答案中突出显示的隐藏字段验证。

$.validator.setDefaults({
    ignore: ''
});

正如评论所指出的,它在$(document).ready()中的匿名回调函数中无效。我不得不将其放在顶层。

我遇到了Select2插件的类似问题。我不知道您具体使用了哪些功能,但是根据我的经验,当您将元素设置为document.ready事件中的select2时,插件将即时更改该元素的某些属性(检查其中一个元素之一页面完成加载后 - 通常,您会看到ID和类属性与查看源时所看到的不同)。

如果不实际看到代码,很难提供更多,但是这里有一些想法可以让您开始:

首先,显然要确保您在标题中具有select2.css样式表的链接。

然后,由于您是在谈论表单提交,我建议您检查您是否获得完整的后备或通过Ajax提交(如果您使用的是Jquerymobile,除非您覆盖,否则使用Ajax它在jquerymobile.js文件中或在您的表单属性中设置data-ajax="false")。您可以查看Request.IsAjaxRequest()返回的值。显然,如果您是通过Ajax提交的,您将不会击中文档。Dready事件,Select2无法正常初始化,您需要弄清楚它的方法。提交后尝试刷新页面,看看它是否呈现Select2组件。

然后,我建议您检查元素,看看它们是否不像您期望的那样表现,因为您实际上是在尝试使用插件在运行时重新分配的课程。您可以只调整逻辑,也可以挖掘select2代码本身并更改行为 - 实际上,它已经有充分记录的代码在做什么,如果您在select2上跳上Google group,igor通常很快就会很快跟进问题。

喜欢

$('select').on('select2:select', function (evt){  
        $(this).blur();  
});  

$('body')。on('change','select.m-select2',function(){

$(this).blur();

})

最新更新