Javascript 从另一个局部视图中删除对字段的验证

Javascript 从另一个局部视图中删除对字段的验证,javascript,c#,asp.net-mvc,validation,Javascript,C#,Asp.net Mvc,Validation,我的应用程序中有两个局部视图。其中一个包含一个选择列表,用于决定付款方式。如果用户选择直接借记,则会打开另一个带有相关输入字段和验证的部分。如果他们选择支票,此表单将隐藏。但是,验证没有被删除 直接借记部分视图 <div class="form-horizontal"> <div class="form-group"> @Html.Label("Sort Code",

我的应用程序中有两个局部视图。其中一个包含一个选择列表,用于决定付款方式。如果用户选择直接借记,则会打开另一个带有相关输入字段和验证的部分。如果他们选择支票,此表单将隐藏。但是,验证没有被删除

直接借记部分视图

<div class="form-horizontal">
                        <div class="form-group">
                            @Html.Label("Sort Code", new { @class = "control-label col-md-2" })
                            <div class="col-md-10">
                                @Html.TextBoxFor(Model => Model.SortCode12, new { @class = "control-label col-md-1", @readonly = "readonly" })
                                <div class="col-md-1"> - </div>
                                @Html.TextBoxFor(Model => Model.SortCode34, new { @class = "control-label col-md-1", @readonly = "readonly" })
                                <div class="col-md-1"> - </div>
                                @Html.TextBoxFor(Model => Model.SortCode56, new { @class = "control-label col-md-1", @readonly = "readonly" })
                            </div>
                            <div class="col-md-10">
                                @Html.ValidationMessageFor(model => model.SortCode12, "", new { @class = "text-danger" })
                                @Html.ValidationMessageFor(model => model.SortCode34, "", new { @class = "text-danger" })
                                @Html.ValidationMessageFor(model => model.SortCode56, "", new { @class = "text-danger" })
                            </div>
                        </div>
                        <div class="form-group">
                            @Html.Label("Account Number", new { @class = "control-label col-md-2" })
                            <div class="col-md-10">
                                @Html.TextBoxFor(Model => Model.BankAccountNumber, new { @class = "control-label col-md-2", @readonly = "readonly" })
                            </div>
                            <div class="col-md-10">
                                @Html.ValidationMessageFor(model => model.BankAccountNumber, "", new { @class = "text-danger" })
                            </div>
                        </div>
                        <div class="form-group">
                            @Html.Label("Account Name", new { @class = "control-label col-md-2" })
                            <div class="col-md-10">
                                @Html.TextBoxFor(Model => Model.BankAccountName, new { @class = "control-label col-md-10", @readonly = "readonly" })
                            </div>
                            <div class="col-md-10">
                                @Html.ValidationMessageFor(model => model.BankAccountName, "", new { @class = "text-danger" })
                            </div>
                        </div>

@Label(“排序代码”,新的{@class=“control Label col-md-2”})
@Html.TextBoxFor(Model=>Model.SortCode12,新的{@class=“控制标签col-md-1”,@readonly=“readonly”})
- 
@Html.TextBoxFor(Model=>Model.SortCode34,新的{@class=“控制标签col-md-1”,@readonly=“readonly”})
- 
@Html.TextBoxFor(Model=>Model.SortCode56,新的{@class=“控制标签col-md-1”,@readonly=“readonly”})
@Html.ValidationMessageFor(model=>model.SortCode12,“,new{@class=“text danger”})
@Html.ValidationMessageFor(model=>model.SortCode34,“,new{@class=“text danger”})
@Html.ValidationMessageFor(model=>model.SortCode56,“,new{@class=“text danger”})
@Label(“帐号”,新的{@class=“control Label col-md-2”})
@Html.TextBoxFor(Model=>Model.BankAccountNumber,新的{@class=“控制标签col-md-2”,@readonly=“readonly”})
@Html.ValidationMessageFor(model=>model.BankAccountNumber,“,new{@class=“text danger”})
@Label(“帐户名”,新的{@class=“control Label col-md-2”})
@Html.TextBoxFor(Model=>Model.BankAccountName,新的{@class=“控制标签col-md-10”,@readonly=“readonly”})
@Html.ValidationMessageFor(model=>model.BankAccountName,“,new{@class=“text danger”})
付款方式局部视图

 <div id="CurrentPaymentMethod">
    <div class="panel-group">
        <div class="panel panel-default">
            <div class="cl panel-heading">
                <h4 class="panel-title">
                    Payment Method
                </h4>
            </div>
                <div class="panel-body">
                    <div class="form-group">
                        @Html.Label("Payment Method", new { @class = "control-label col-md-2" })
                        <div class="col-md-10">
                           @Html.DropDownListFor(Model => Model.PaymentMethodID,
                                                   new SelectList(Model.PaymentMethods, "Id", "Description"),
                                                   "Select Payment Method",
                                                   new { @class = "form-control", @required = "required", @onchange = "ChangePaymentMethod(this.value)" })
                        </div>
                        <div class="col-md-10">
                            @Html.ValidationMessageFor(model => model.PaymentMethodID, "", new { @class = "text-danger" })
                        </div>
                    </div>
                </div>
        </div>
    </div>
 </div>
<script>
function ChangePaymentMethod(paymentMethodID)
{
    @* Show Direct Debit section if the DD payment option (ID=0) has been selected*@
    if (paymentMethodID == 0) {
        document.getElementById("CurrentDirectDebitDetails").style.display = "block";

    }
    else {
        document.getElementById("CurrentDirectDebitDetails").style.display = "none";
        document.getElementById("SortCode34").removeAttribute("data-val-required");
        document.getElementById("SortCode12").removeAttribute("data-val-required");
        document.getElementById("SortCode56").removeAttribute("data-val-required");
        document.getElementById("BankAccountNumber").removeAttribute("data-val-required");
        document.getElementById("BankAccountName").removeAttribute("data-val-required");
    }
}

付款方式
@Label(“付款方式”,新的{@class=“control Label col-md-2”})
@Html.DropDownListFor(Model=>Model.PaymentMethodID,
新的选择列表(Model.PaymentMethods、“Id”、“Description”),
“选择付款方式”,
新的{@class=“form control”、@required=“required”、@onchange=“ChangePaymentMethod(this.value)”})
@Html.ValidationMessageFor(model=>model.PaymentMethodID,“,new{@class=“text danger”})
函数更改PaymentMethod(paymentMethodID)
{
@*如果选择了DD付款选项(ID=0),则显示直接借记部分*@
如果(paymentMethodID==0){
document.getElementById(“CurrentDirectDebitDetails”).style.display=“block”;
}
否则{
document.getElementById(“CurrentDirectDebitDetails”).style.display=“无”;
document.getElementById(“SortCode34”).removeAttribute(“需要数据值”);
document.getElementById(“SortCode12”).removeAttribute(“需要数据值”);
document.getElementById(“SortCode56”).removeAttribute(“需要数据值”);
document.getElementById(“银行账号”).removeAttribute(“需要数据值”);
document.getElementById(“BankAccountName”).removeAttribute(“需要数据值”);
}
}

在底部,我创建了一些javascript,根据下拉选择项显示和隐藏直接债务。这是可行的,但是验证仍然存在


对此的任何帮助都将不胜感激

您可以为所有验证消息、errorMessagesForm1 form2等提供特定的类名。。。 然后使用这个类来选择消息并隐藏它或删除它,或者你想用它做的任何事情

像这样的,

 @Html.ValidationMessageFor(model => model.PaymentMethodID, "", new { @class = "text-danger ErrMsgsForm2" })
js

var ErrorMSGs=document.getElementsByClassName(“ErrMsgsForm2”);
//所有错误消息的数组,在其中循环
对于(变量i=0;i
使用
[RequiredIf]
或应用于您的财产的类似条件验证属性无效-模型仍然无效,无法提交表单-但要知道用户根本不知道发生了什么,因为没有发现错误visible@StephenMuecke我的意思是为了验证他没有使用的表单而隐藏错误,不是所有的,一旦我们回到那个状态,他应该再次展示它。那是个坏主意吗?是的。隐藏错误文本并不能阻止
$.validator
无效(由于其无效,表单将不会提交回服务器,可怜的用户陷入不知道发生了什么的困境)。OP需要使用条件验证attributes@StephenMuecke哦,我误解了他的问题,我想当他改变形式时
var ErrorMSGs= document.getElementsByClassName("ErrMsgsForm2"); 
    // Array of all error messages, loop through it
    for(var i = 0; i < ErrorMSGs.length; i++){
        ErrorMSGs[i].style.visibility = "hidden"; // or any other method, maybe change innerHTML  etc 
    }