gpt4 book ai didi

c# - 将 EditorFor 用于 List 时客户端验证不显示消息

转载 作者:行者123 更新时间:2023-12-03 12:24:00 25 4
gpt4 key购买 nike

我有一个模型,简单:

public class MyModel {
public int Id { get; set; }

[MyValidation]
public CheckBoxModel IList<Options> { get; set; }
}

CheckBoxModel 是:

public class CheckBoxModel {
public int Id { get; set; }
public bool IsChecked { get; set; }
}

MyValidation类:

public class MyValidationAttribute : ValidationAttribute, IClientValidatable {
public IEnumerable<ModelClientValidationRule> GetClientValidationRules( ModelMetadata metadata,
ControllerContext context )
{
yield return new ModelClientValidationRule {ValidationType = "requiredgroup"};
}

public override bool IsValid( object value )
{
// logic here
}
}

好的,让我们也向您展示 View :

<div class="test">
@Html.EditorFor(model=>model.Options)
@Html.ValidationMessageFor(model=>model.Options)
</div>

编辑器模板类似于 CheckBoxModel.cshtml:

<div>
@Html.CheckBoxFor(m=>m.IsChecked, new {data_val_requiredgroup = "One item should be checked"})
...
</div>

EditorFor生成的HTML看起来像

<div>
<input type="checkbox" id="Options[0].IsChecked" name="Options[0]_IsChecked" data-val-required-group="One item should be checked"/>
</div>

自定义 JavaScript 验证:

$.validator.unobtrusive.adapters.add('requiredgroup', {}, function (options) {
options.rules['requiredgroup'] = true;
options.messages['requiredgroup'] = options.message;
});

$.validator.addMethod('requiredgroup', function(value, element, params) {
var $module = $(element).parents('form');
var result = $module.find('input[type="checkbox"][data-val-requiredgroup]:checked').length;

return result;
});

客户端验证有效(表单提交被取消并保留在同一页面上),但没有显示错误。

如何实现这一目标?如何在 @Html.ValidationMessageFor(model=>model.Options) 中显示错误消息?

最佳答案

您的自定义验证类需要继承 ValidationAttribute 类,并将错误消息传递给基本构造函数。

public class DummyAttribute : ValidationAttribute, IClientValidatable
{
public DummyAttribute() : base("{0} contains invalid data.")
....
}

关于c# - 将 EditorFor 用于 List<T> 时客户端验证不显示消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24303868/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com