C# 继承泛型类MVC时出错
我正在实现一个类,我想从接口和类继承它。当我使用simple类时,它工作得非常好,但我想让它变得通用。当我把它变成一般性的时候,它是在给出错误。我正在分享我的代码,请引导我C# 继承泛型类MVC时出错,c#,asp.net-mvc,asp.net-mvc-4,generics,C#,Asp.net Mvc,Asp.net Mvc 4,Generics,我正在实现一个类,我想从接口和类继承它。当我使用simple类时,它工作得非常好,但我想让它变得通用。当我把它变成一般性的时候,它是在给出错误。我正在分享我的代码,请引导我 [AttributeUsage(AttributeTargets.Property, AllowMultiple = true)] public abstract class ValidateCheckBox<TEntity, Validate, IValidate> where TEntity :
[AttributeUsage(AttributeTargets.Property, AllowMultiple = true)]
public abstract class ValidateCheckBox<TEntity, Validate, IValidate>
where TEntity : class
where Validate :
ValidationAttribute
where IValidate : IClientValidatable
{
public int MinValue { get; set; }
public ValidateCheckBox(int minValue)
{
MinValue = minValue;
ErrorMessage = "At least " + MinValue + " {0} needs to be checked.";
}
public override string FormatErrorMessage(string propName)
{
return string.Format(ErrorMessage, propName);
}
protected override ValidationResult IsValid(object value, ValidationContext validationContext)
{
try
{
List<CheckboxInfo> valueList = (List<CheckboxInfo>)value;
foreach (var valueItem in valueList)
{
if (valueItem.Selected)
{
return ValidationResult.Success;
}
}
return new ValidationResult(FormatErrorMessage(validationContext.DisplayName));
}
catch (Exception x)
{
return new ValidationResult(FormatErrorMessage(validationContext.DisplayName));
}
}
public IEnumerable<ModelClientValidationRule> GetClientValidationRules(ModelMetadata metadata, ControllerContext context)
{
var rule = new ModelClientValidationRule
{
ErrorMessage = FormatErrorMessage(metadata.GetDisplayName()),
ValidationType = "minchecked",
};
rule.ValidationParameters["minvalue"] = MinValue;
yield return rule;
}
}
[AttributeUsage(AttributeTargets.Property,AllowMultiple=true)]
公共抽象类ValidateCheckBox
地点:班级
其中验证:
验证属性
IValidate的位置:IClientValidable
{
公共int最小值{get;set;}
公共ValidateCheckBox(int-minValue)
{
MinValue=MinValue;
ErrorMessage=“至少需要检查“+MinValue+”{0}。”;
}
公共重写字符串FormatErrorMessage(字符串propName)
{
返回string.Format(ErrorMessage,propName);
}
受保护的重写ValidationResult有效(对象值,ValidationContext ValidationContext)
{
尝试
{
列表值列表=(列表)值;
foreach(valueList中的var valueItem)
{
如果(valueItem.Selected)
{
返回ValidationResult.Success;
}
}
返回新的ValidationResult(FormatErrorMessage(validationContext.DisplayName));
}
捕获(异常x)
{
返回新的ValidationResult(FormatErrorMessage(validationContext.DisplayName));
}
}
公共IEnumerable GetClientValidationRules(ModelMetadata元数据、ControllerContext上下文)
{
var规则=新ModelClientValidationRule
{
ErrorMessage=FormatErrorMessage(metadata.GetDisplayName()),
ValidationType=“minchecked”,
};
rule.ValidationParameters[“minvalue”]=minvalue;
收益率-收益率规则;
}
}
导致错误的问题是您没有从ValidationAttribute继承。您正在使用它作为约束。看见但这带来了其他问题。我认为通用属性不受支持。见和
我想你要用的方法是简单的ol’:
public abstract class ValidateCheckBox : ValidationAttribute { ... }
似乎有一种解决方法,将对象的属性添加到自定义属性中,并在使用属性时指定泛型类型:
public class GenericClass<T>
{ ... }
public class CustomAttribute : Attribute
{
public System.Object info;
}
公共类GenericClass
{ ... }
公共类CustomAttribute:属性
{
公共系统。对象信息;
}
然后像这样使用它:
[CustomAttribute(info = typeof(GenericClass<...>))]
...
[CustomAttribute(info=typeof(GenericClass))]
...
有关解决方法的更多信息。错误说明了什么?它说“当前上下文中不存在名称ErrorMessage”@SLaks而且它不识别此上下文中的任何方法class@Smith.h.Neil我从“ValidationAttribute”继承了它class@Smith.h.Neil如果我不把它改成通用的,那就可以了谢谢你的代码帮助,我已经更新了我的问题,实际上这是一个属性,我想让它成为通用的,因为它现在正在为“CheckboxInfo”工作class@Usama据我所知,通用属性不受支持。请参阅和。我希望您至少看到您不是从ValidationAttribute继承的。看看你到底在做什么。