gpt4 book ai didi

asp.net-mvc - 一个 ASP.NET MVC 验证器,用于确保至少选中一个复选框

转载 作者:行者123 更新时间:2023-12-02 09:06:30 25 4
gpt4 key购买 nike

我有一个 ASP.NET MVC 2 项目,在其中创建了一个数据传输对象来从网页表单接收数据。该表单上有两组复选框。我想验证对象以确保至少选中每组中的一个复选框。

我在服务器端进行验证,以便用户无法绕过任何客户端验证。 (稍后我将使用 jQuery 添加客户端验证;这很简单。)

我的理解是,我必须为我的数据传输对象类创建自己的自定义 ValidationAttribute,但我不明白如何创建和使用可以接受任意复选框属性列表的验证属性,以确保至少有一个其中是真的。我猜我必须这样调用属性:

[AtLeastOneCheckbox("set1check1", "set1check2", "set1check3",
ErrorMessage = "You must check at least one checkbox in set 1.")]
[AtLeastOneCheckbox("set2check1", "set2check2", "set2check3", "set2check4", "set2check5",
ErrorMessage = "You must check at least one checkbox in set 2.")]
public class MyFormDTO
{
...
}

AtLeastOneCheckboxAttribute 的实现是什么样的?

或者我应该有不同的方式来进行这种验证吗?

最佳答案

如果您有多个复选框组,则只需多次定义属性即可。

[AttributeUsage( AttributeTargets.Class)]
public class AtLeastOneCheckboxAttribute : ValidationAttribute
{
private string[] _checkboxNames;

public AtLeastOneCheckboxAttribute(params string[] checkboxNames)
{
_checkboxNames = checkboxNames;
}

protected override ValidationResult IsValid(object value, ValidationContext validationContext)
{
var propertyInfos = value.GetType().GetProperties(BindingFlags.Public | BindingFlags.Instance)
.Where(x=>_checkboxNames.Contains(x.Name));

var values = propertyInfos.Select(x => x.GetGetMethod().Invoke(value, null));
if (values.Any(x => Convert.ToBoolean(x)))
return ValidationResult.Success;
else
{
ErrorMessage = "At least one checkbox must be selected";
return new ValidationResult(ErrorMessage);
}
}
}
<小时/>

更新

正如您所发现的,仅在所有属性通过后才会调用类级别验证。为了得到错误,只需使用空字符串作为键

关于asp.net-mvc - 一个 ASP.NET MVC 验证器,用于确保至少选中一个复选框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4491521/

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