Asp.net mvc 淘汰单选按钮“;勾选“;绑定不是';t使用jQuery进行不引人注目的验证
我有两个单选按钮组,它们都通过相同的KnockoutJS“checked”绑定(比如Asp.net mvc 淘汰单选按钮“;勾选“;绑定不是';t使用jQuery进行不引人注目的验证,asp.net-mvc,knockout.js,unobtrusive-validation,Asp.net Mvc,Knockout.js,Unobtrusive Validation,我有两个单选按钮组,它们都通过相同的KnockoutJS“checked”绑定(比如checked:HasPets,checkedValue:true)连接在一起。第一个具有一条不引人注目的验证消息,在用户选择答案之前一直显示该消息 问题是,当我检查问题上没有非干扰性验证的单选按钮时,字段验证错误不会消失。下面是一个例子: 我能做些什么让这个验证信息消失吗 此外,下面是用于重现问题的代码的一个最小示例: @model test_mvc_app.Models.TestModel @using
checked:HasPets,checkedValue:true
)连接在一起。第一个具有一条不引人注目的验证消息,在用户选择答案之前一直显示该消息
问题是,当我检查问题上没有非干扰性验证的单选按钮时,字段验证错误
不会消失。下面是一个例子:
我能做些什么让这个验证信息消失吗 此外,下面是用于重现问题的代码的一个最小示例:
@model test_mvc_app.Models.TestModel
@using (Html.BeginForm("Pets", "Home", FormMethod.Post, new { id = "petsForm" }))
{
@Html.LabelFor(m => m.HasPets)
<div>
@Html.RadioButtonFor(m => m.HasPets, true, new { @id = "HasPetsTrue", @data_bind = "checked: HasPets, checkedValue: true" })
<label for="HasPetsTrue">Yes</label>
@Html.RadioButtonFor(m => m.HasPets, false, new { @id = "HasPetsFalse", @data_bind = "checked: HasPets, checkedValue: false" })
<label for="HasPetsFalse">No</label>
</div>
@Html.ValidationMessageFor(m => m.HasPets)
<hr/>
<label>Just to clarify, you're a pet owner, right?</label>
<div>
<input data-bind="checked: HasPets, checkedValue: true" type="radio" value="true" >
<label>Yes</label>
<input data-bind="checked: HasPets, checkedValue: false" type="radio" value="false" >
<label>No</label>
</div>
}
<script>
$(document).ready(function () {
var vm = function () {
var self = this;
self.HasPets = ko.observable(null);
}
var viewModel = new vm();
ko.applyBindings(viewModel);
// This makes the validation message appear by default.
$("#petsForm").valid();
});
</script>
@model test\u mvc\u app.Models.TestModel
@使用(Html.BeginForm(“Pets”,“Home”,FormMethod.Post,new{id=“petsForm”}))
{
@LabelFor(m=>m.HasPets)
@RadioButton(m=>m.HasPets,true,new{@id=“HasPetsTrue”,@data\u bind=“checked:HasPets,checkedValue:true”})
对
@RadioButton(m=>m.HasPets,false,new{@id=“HasPetsFalse”,@data\u bind=“checked:HasPets,checkedValue:false”})
不
@Html.ValidationMessageFor(m=>m.HasPets)
澄清一下,你是宠物主人,对吗?
对
不
}
$(文档).ready(函数(){
var vm=函数(){
var self=这个;
self.HasPets=ko.可观察(空);
}
var viewModel=new vm();
应用绑定(视图模型);
//这将使验证消息在默认情况下显示。
$(“#petsForm”).valid();
});
编辑:以下是呈现的HTML:
对
不
请回答这个问题。
您可能需要在错误消息元素上添加一个属性,例如,
,在该属性中,计算函数知道是否存在未解决的非结构化错误。这就是我要研究的方法。@JasonEvans这完全有道理,我正在使用可见的绑定,但我希望有一个更可扩展的解决方案(对于一个有无数字段的表单)。看起来两个组中的输入都使用了相同的ID集。这可能不是问题的根源,但它是错误的。你能发布MVC生成的HTML吗?看到结果会很有启发性。@RoyJ是的,我也会发布呈现的HTML。id是一个输入错误:HtmlHelpers会自动为这些单选按钮生成id,所以我在代码中不会多次使用HtmlHelpers。删除重复的ID后,问题依然存在。我在这里做了一个dotnet小提琴:但我不知道如何处理MVC,所以我只是在瞎弄。控制台获取有关$(“#petsForm”).valid()的错误
,表示没有有效的
方法。你能用它来证明你的问题吗?
<div>
<input data-bind="checked: HasPets, checkedValue: true" data-val="true" data-val-required="Please answer this question." id="HasPetsTrue" name="HasPets" type="radio" value="true" aria-required="true" class="input-validation-error" aria-describedby="HasPets-error">
<label for="HasPetsTrue">Yes</label>
<input data-bind="checked: HasPets, checkedValue: false" id="HasPetsFalse" name="HasPets" type="radio" value="false" class="input-validation-error">
<label for="HasPetsFalse">No</label>
</div>
<span class="field-validation-error" data-valmsg-for="HasPets" data-valmsg-replace="true"><span id="HasPets-error" class="">Please answer this question.</span></span>