簡體   English   中英

錯誤繼承通用類MVC

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM