ASP.. NET mvc客户端验证

ASP.NET MVC5 Client-side Validation

本文关键字:验证 客户端 mvc NET ASP      更新时间:2023-09-26

如果复选框被选中,则视图中需要一个amount字段。

一旦Razor呈现带有模型数据的视图,并且用户选中了一个没有输入相应数量的复选框。出现Validation消息。如果我取消选中该复选框,验证消息不会消失。

我已经尝试使用jquery删除所有生成的规则,但如果用户再次选择复选框,在返回之前,这些验证规则将被删除(除非我存储它们…这真是太难看了

是否有一种可接受的方式来重新验证客户端与MVC模型中的相同要求?

模型:

[Display(Name = "Include Amount")]
public bool IncludeAmount { get; set; }
[Display(Name = "Amount")]
[RequiredIf("IncludeAmount", TargetValue = true, ErrorMessage = "Amount is required.")]
[MaxDigits(10, 2)]
[RegularExpression(RegularExpressions.Money, ErrorMessage = ErrorMessages.NumericValueInvalidFormat)]
[GreaterThanZero]
public Nullable<decimal> Amount { get; set; }

视图:

<td class="dataEntryLabel" colspan="2">
    @Html.LabelFor(model => model.IncludeAmount)
</td>
<td class="dataEntryField" colspan="2">
    @Html.CheckBoxFor(model => model.IncludeAmount, new { id = "IncludeAmount" })
    <span class="dollar-sign">@Html.TextBoxFor(model => model.Amount, "{0:F}", new { id = "Amount", disabled = "disabled" })</span>
    @Html.ValidationMessageFor(model => model.Amount)
</td>
JavaScript(客户端):

function fixUnobtrusiveValidations() {
    var form = getForm();
    (<any>$).validator.unobtrusive.parse(form);
}
function onClickCheckBoxIncludeAmount(){
        fixUnobtrusiveValidations();
}
$('IncludeAmount').click(onClickCheckBoxIncludeAmount);

尝试禁用onclick事件的客户端验证参考:https://jqueryvalidation.org/validate/onclick

$("#myform").validate({
    onclick: false,
});

$("#yourChkboxID").validate({
    onclick: false,
});

成功了:

if (!($('#IncludeAmount').checked)){
   toggleValidatorVisibility($('#Amount'), false);
}
function toggleValidatorVisibility(element: any, value) {
  var td: any = element.closest('td');
  if (value) {
       td.find('span.field-validation-error').show();
  } else {
       td.find('span.field-validation-error').empty();
  }
}