Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-core/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Razor 实现IValidatableObject时的自定义错误消息_Razor_Asp.net Core_Unobtrusive Validation - Fatal编程技术网

Razor 实现IValidatableObject时的自定义错误消息

Razor 实现IValidatableObject时的自定义错误消息,razor,asp.net-core,unobtrusive-validation,Razor,Asp.net Core,Unobtrusive Validation,我已经实现了IValidatableObject,没有任何问题: public class DisclaimerCBs : IValidatableObject { public bool cb1 { get; set; } = false; public bool cb2 { get; set; } = false; public bool cb3 { get; set; } = false; public IEnumera

我已经实现了
IValidatableObject
,没有任何问题:

 public class DisclaimerCBs : IValidatableObject
 {
        public bool cb1 { get; set; } = false;
        public bool cb2 { get; set; } = false;
        public bool cb3 { get; set; } = false;

        public IEnumerable<ValidationResult> Validate(ValidationContext validationContext)
        {
            Type type = validationContext.ObjectInstance.GetType();
            IEnumerable<PropertyInfo> checkBoxeProperties = type.GetProperties(BindingFlags.Instance | BindingFlags.Public).Where(p => p.PropertyType == typeof(bool));

            bool allIsChecked = true;
            foreach (PropertyInfo checkBoxProperty in checkBoxeProperties)
            {
                var isChecked = (bool)checkBoxProperty.GetValue(validationContext.ObjectInstance);
                if (!isChecked)
                {
                    allIsChecked = false;
                    break;
                }
            }

            if(!allIsChecked)
                yield return new ValidationResult("Please agree to all Disclaimers. ");

            //TRUE IF THIS FAR
            yield return ValidationResult.Success;
        }
}
public类免责声明cbs:IValidatableObject
{
公共boolcb1{get;set;}=false;
公共boolcb2{get;set;}=false;
公共boolcb3{get;set;}=false;
公共IEnumerable验证(ValidationContext ValidationContext)
{
类型类型=validationContext.ObjectInstance.GetType();
IEnumerable checkBoxeProperties=type.GetProperties(BindingFlags.Instance | BindingFlags.Public);
bool-allIsChecked=true;
foreach(checkBoxeProperties中的PropertyInfo checkBoxProperty)
{
var isChecked=(bool)checkBoxProperty.GetValue(validationContext.ObjectInstance);
如果(!已检查)
{
allIsChecked=假;
打破
}
}
如果(!allIsChecked)
返回新的ValidationResult(“请同意所有免责声明”);
//如果到目前为止是真的
产生返回验证结果。成功;
}
}

但是,这仅在验证摘要中显示错误消息。我还希望将此错误的焦点放在指定的
元素上,并像属性验证器使用
一样在标签中重复此错误。我如何才能做到这一点?

将您的
验证方法替换为以下方法:

public IEnumerable<ValidationResult> Validate(ValidationContext validationContext)
{
     Type type = validationContext.ObjectInstance.GetType();
     IEnumerable<PropertyInfo> checkBoxeProperties = type.GetProperties(BindingFlags.Instance | BindingFlags.Public).Where(p => p.PropertyType == typeof(bool));

     List<ValidationResult> validationResult = new List<ValidationResult>();

     foreach (PropertyInfo checkBoxProperty in checkBoxeProperties)
     {
         var isChecked = (bool)checkBoxProperty.GetValue(validationContext.ObjectInstance);
         if (!isChecked)
         {
             validationResult.Add(new ValidationResult("Please agree to this Disclaimer.", new[] { checkBoxProperty.Name }));
         }
     }

     return validationResult;
}
公共IEnumerable验证(ValidationContext ValidationContext) { 类型类型=validationContext.ObjectInstance.GetType(); IEnumerable checkBoxeProperties=type.GetProperties(BindingFlags.Instance | BindingFlags.Public); 列表验证结果=新列表(); foreach(checkBoxeProperties中的PropertyInfo checkBoxProperty) { var isChecked=(bool)checkBoxProperty.GetValue(validationContext.ObjectInstance); 如果(!已检查) { Add(new validationResult(“请同意此免责声明”),new[]{checkBoxProperty.Name}); } } 返回验证结果; }
TagHelper如何引用您的示例<代码>谢谢@TanvirArjelI更新了答案。如果标记帮助程序的名称与免责声明CBS模型类的属性名称相同,它将自动引用标记帮助程序。请检查一下。