[英]Error inherit generic class MVC
我正在實現一個我想從接口和類繼承的類。 當我使用簡單的類但我想使其泛型時,它的工作原理非常完美。 當我使它通用時,它給出了錯誤。 我正在分享我的代碼,請指導我。
[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;
}
}
導致該錯誤的問題是您沒有從ValidationAttribute繼承。 您正在使用它作為約束。 有關約束,請參見MSDN 。 但這帶來了其他問題。 我認為不支持通用屬性。 看到這個和這個 。
我認為您必須使用此方法的方式很簡單:
public abstract class ValidateCheckBox : ValidationAttribute { ... }
看起來有一種解決方法,即將Object
的屬性添加到自定義屬性中,並在使用該屬性時指定通用類型:
public class GenericClass<T>
{ ... }
public class CustomAttribute : Attribute
{
public System.Object info;
}
然后像這樣使用它:
[CustomAttribute(info = typeof(GenericClass<...>))]
...
有關解決方法的更多信息,請參見此處 。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.