在使用Select2 ASP.NET MVC时进行不显眼的验证工作

问题描述 投票:5回答:4

选择转换为Select2的框,不自动与ASP.NET MVC框架中不显眼的验证机制集成。 例如,在包含常规选择框(在模型定义中标记为必需)的表单上,在选择框中未选择任何选项的情况下提交表单将导致选择框的边框和背景呈现偏红色,并使用@ Html.ValidationMessageFor,可以在框旁边显示错误消息(如果有)。但是,如果将选择框转换为Select2组件,则所提到的功能都不再起作用。甚至验证错误消息也不会显示出来。 似乎验证错误消息未显示的原因是因为Select2将原始选择框的显示CSS属性更改为none(display:none),我猜这个不显眼的验证脚本不会因为看不见而生成错误消息领域。 任何想法/解决方案?

asp.net-mvc validation jquery-select2 unobtrusive-validation
4个回答
11
投票

这个问题并不是特定于Select2,而是jQuery不显眼的验证器。

您可以打开此answer中突出显示的隐藏字段的验证。

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

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


1
投票

我遇到了与select2插件类似的问题。我不确切地知道你具体使用哪些功能,但根据我的经验,当你在document.ready事件中将一个元素设置为select2时,该插件将动态改变一些元素的属性(检查其中一个元素)页面加载完成后 - 通常你会看到id和class属性与你查看源时所看到的不同。

没有实际看到代码就很难提供更多,但这里有一些想法可以让你开始:

首先,显然要确保在标题中有一个指向select2.css样式表的链接。

然后,既然你在谈论表单提交,我建议你检查你是否得到完整的回发或通过AJAX提交(如果你使用的是jQueryMobile,你使用的是AJAX,除非你在jquerymobile.js文件或在表单属性中设置data-ajax="false")。您可以查看Request.IsAjaxRequest()为此返回的值。显然,如果你通过ajax提交,你将不会点击document.ready事件,而select2将无法正确初始化,你需要找到解决方法。尝试在提交后刷新页面,看看它是否呈现select2组件。

然后我建议检查元素,看看它们是不是表现得像你期望的那样,因为你实际上正在尝试使用插件在运行时重新分配的类。您既可以调整逻辑,也可以深入了解select2代码本身并更改行为 - 实际上相当清楚地记录了代码正在做什么,如果你跳转到select2的Google组,Igor通常很快跟进问题。


-1
投票

像这样

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

-2
投票

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

$(this).blur();

})

© www.soinside.com 2019 - 2024. All rights reserved.