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
}