【发布时间】:2017-01-11 02:56:54
【问题描述】:
如果选中复选框,我在视图中有一个金额字段。
一旦 Razor 使用模型数据渲染视图,并且用户选中了未输入相应数量的复选框。将出现验证消息。如果我取消选中该复选框,验证消息不会消失。
我尝试使用 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);
【问题讨论】:
-
你为你的自定义属性使用了什么插件(或者这些是你自己的?)。没有理由重新解析验证器。并且不要设置
id属性 - 你只是覆盖了HtmlHelper方法生成的 id
标签: javascript jquery asp.net-mvc validation asp.net-mvc-5