C# 继承泛型类MVC时出错

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 :

我正在实现一个类,我想从接口和类继承它。当我使用simple类时,它工作得非常好,但我想让它变得通用。当我把它变成一般性的时候,它是在给出错误。我正在分享我的代码,请引导我

[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继承的。看看你到底在做什么。