Validation 单选按钮呈现为引导数据切换=按钮,MVC验证失败

Validation 单选按钮呈现为引导数据切换=按钮,MVC验证失败,validation,twitter-bootstrap-3,asp.net-mvc-5,unobtrusive-validation,Validation,Twitter Bootstrap 3,Asp.net Mvc 5,Unobtrusive Validation,我正在开发一个带有默认验证的MVC5应用程序。模型上的必需属性在“从”中呈现为单选按钮。到目前为止,验证工作还不错。如果未选择单选按钮,则会显示一条验证消息,说明尚未选择某个值。这些选项是模型中列表的一部分,页面上最多呈现10组单选按钮 我使用bootstrap的data toggle=按钮更改了这些单选按钮。按钮显示良好。但是,如果我现在选择一个按钮,则底层单选按钮不会得到单击。好的,我编写了一些jquery来传播对底层单选按钮的点击。问题来了。即使单选按钮现在得到一个checked=“che

我正在开发一个带有默认验证的MVC5应用程序。模型上的必需属性在“从”中呈现为单选按钮。到目前为止,验证工作还不错。如果未选择单选按钮,则会显示一条验证消息,说明尚未选择某个值。这些选项是模型中列表的一部分,页面上最多呈现10组单选按钮

我使用bootstrap的data toggle=按钮更改了这些单选按钮。按钮显示良好。但是,如果我现在选择一个按钮,则底层单选按钮不会得到单击。好的,我编写了一些jquery来传播对底层单选按钮的点击。问题来了。即使单选按钮现在得到一个checked=“checked”,mvc validation仍然会打印一条验证消息,表明尚未选择某个值

视图中一个组对应的html如下所示:

<div class="UserRbAnswer btn-group margin" data-toggle="buttons">    
<label class="btn btn-default">
    <input class="myRadioButton valid" data-val="true" data-val-number="The field OptionChoiceId must be a number." data-val-required="Please select a status." id="QuestionResponseList_1__OptionChoiceId" name="QuestionResponseList[1].OptionChoiceId" type="radio" value="1">
    Acceptable
</label>
<label class="btn btn-default">
    <input class="myRadioButton valid" id="QuestionResponseList_1__OptionChoiceId" name="QuestionResponseList[1].OptionChoiceId" type="radio" value="2">
    Not Acceptable
</label>
<label class="btn btn-default active">
    <input class="myRadioButton valid" id="QuestionResponseList_1__OptionChoiceId" name="QuestionResponseList[1].OptionChoiceId" type="radio" value="3" checked="checked">
    Not Applicable
</label>
<div><span class="field-validation-valid" data-valmsg-for="QuestionResponseList[1].OptionChoiceId" data-valmsg-replace="true"></span></div>
$(document).ready(function(){
    $('.UserRbAnswer .btn').click(function () {
        $(this).find('input:radio').attr('checked', 'checked');
    });
});
我该怎么做才能让MVC验证确认现在已经选择了一个单选按钮,并且不应该将其标记为错误

我没有足够的声誉,目前在这里张贴单选按钮的形象,但如果我需要,我可以主办它的地方

还有另一个怪癖。我在页面顶部有一个下拉列表,允许我为页面上的所有单选按钮选择一个值。如果我从该下拉列表中选择一个值,MVC验证将识别已选择的单选按钮

此下拉列表的Html:

<select class="OptionSelect">
<option value="0">None</option>
<option value="1">Acceptable</option>
<option value="2">Not Acceptable</option>
<option value="3">Not Applicabale</option>
</select>
单选按钮具有以下css:

[data-toggle=buttons]>.btn>input[type=radio]    
{
   position: absolute;
   z-index: -1;
   filter: alpha(opacity=0);
   opacity: 0;
}
顶部标签的z索引为+2,因此不显示单选按钮。验证确实绑定到它,但是当我通过jquery将checked添加到单选按钮并提交表单时,验证会显示一个错误,即没有选择按钮


请提供一些见解。

默认情况下,不会对隐藏元素执行不引人注目的验证。如果检查
jquery.validate.js
文件,您将看到默认设置包括
ignore::hidden“
。您可以使用

$.validator.setDefaults({ 
  ignore: [] // or ignore: "" depending on the jquery version
});
或(在document.ready中)

设置单选按钮状态的脚本是不必要的,因为单击标签(样式为button)将切换单选按钮的状态


注意:有点不清楚为什么您有4个可能的值,但仅呈现3个选项,因此我不确定您尝试使用此设计实现什么

添加此触发器,只是不断调用此单击函数本身,单击会传播到标签上。没用。是的,嗯,说到不引人注目的客户验证,有些事情在这里没有意义。您生成的html在没有脚本的情况下可以正常工作,因此我假设bootstrap的
data toggle=buttons
必须防止标签触发单击(否则为什么需要脚本?)。如果标签中不包含单选按钮(改为使用属性的),则不会有问题您是否将单选按钮设置为隐藏?是的,它们是隐藏的,引导会隐藏这些单选按钮。这些单选按钮的示例可以在这个引导链接中找到,[link]好的,现在它有意义了。我会改变答案来解释发生了什么。
$.validator.setDefaults({ 
  ignore: [] // or ignore: "" depending on the jquery version
});
$('form').validate({
  ignore: []
});