我正在尝试更改表单字段的data-val-required
属性,以便显示一个通用的“必需”。现在我知道我可以使用以下内容执行此操作:
@Html.TextBoxFor(model => model.Name, new { data_val_required ="required" })
但是我不想将它“硬编码”到模板中,我希望模型使用必需的属性集,然后使用类似的东西通过js覆盖它:
$('input, select, textarea').each(function () {
var element = $(this);
if (element.data('val-required')) {
element.data('val-required', 'required');
}
});
我已经准备好了文档,并检查了数据属性是否已经改变(他们有)但显然这种情况发生得太晚,以至于验证没有注意到它。所以我需要知道什么时候MVC绑定它的表单验证,所以我可以在之前运行它或如何仅更改客户端的错误消息。
我查看了页面的来源,却看不到验证实例化的位置。
对于那些说改变所需属性或者做服务器端的人,我不想这样做,好像我已经禁用js我在表单的顶部显示一个验证摘要,如果他们都只是说需要。这就是为什么我只想做这个客户端
答案 0 :(得分:2)
我认为你可以通过数据注释实现这一目标。只需将模型项标记为
即可[Required]
如果要覆盖错误消息,请执行此操作
[Required(ErrorMessage = "Name is required")]
请参阅此帖子:Error messages for model validation using data annotations
答案 1 :(得分:1)
对于那些对解决方案感兴趣的人,以下内容将重置验证消息:
(function () {
$('input, select, textarea').each(function () {
var element = $(this);
if (element.data('val-required')) {
element.attr('data-val-required', 'Required'); // please note this has to be the attr not data
}
});
form = $('form');
form.removeData("validator").removeData("unobtrusiveValidation");
$.validator.unobtrusive.parse(form);
});
答案 2 :(得分:1)
你真的不希望在JavaScript和操作属性中这样做,这在Razor中是完全可以实现的。
只需让您的ValidationSummary
不排除个别财产错误:
@Html.ValidationSummary(false)
然后删除所有字段的所有ValidationMessageFor
。