Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net mvc 淘汰单选按钮“;勾选“;绑定不是';t使用jQuery进行不引人注目的验证_Asp.net Mvc_Knockout.js_Unobtrusive Validation - Fatal编程技术网

Asp.net mvc 淘汰单选按钮“;勾选“;绑定不是';t使用jQuery进行不引人注目的验证

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

我有两个单选按钮组,它们都通过相同的KnockoutJS“checked”绑定(比如
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>