リンクから上記のカスタム属性を使用しました ( MVC3 入力の控えめな検証グループ) が、ほとんど変更していません。プロパティタイプとしての文字列の代わりに、必要なものであるリストをチェックしています。私にとっては、検証は正常に機能しています。しかし、エラーメッセージは表示されません。デバッグすると、検証するプロパティのデータ注釈に設定されたエラー メッセージが、カスタム バリデータ コンストラクターで null として送信されることがわかりました。ハード コードされたエラー メッセージとリソース バンドルからのエラー メッセージの両方を試しました。
この問題を解決する方法を教えてください。
参照用の私のコード。
以下の属性が使用されるプロパティ
[AtLeastOneRequired("List1", "List2", ErrorMessage = "Test Error Message", ErrorMessageResourceType = typeof(Motorola.MWM.Web.Resources.MWMResource), ErrorMessageResourceName = "ERROR_MSG_USER_GROUP")]
public List<string> List1 { get; set; }
public List<string> List2 { get; set; }
public class AtLeastOneRequiredAttribute : ValidationAttribute, IClientValidatable
{
private readonly string[] _properties;
public AtLeastOneRequiredAttribute(params string[] properties)
{
_properties = properties;//properties are populated
Console.WriteLine(ErrorMessage);//but error message is null
}
protected override ValidationResult IsValid(object value, ValidationContext validationContext)
{
if (_properties == null || _properties.Length < 1)
{
return null;
}
foreach (var property in _properties)
{
var propertyInfo = validationContext.ObjectType.GetProperty(property);
if (propertyInfo == null)
{
return new ValidationResult(string.Format("unknown property {0}", property));
}
var propertyValue = propertyInfo.GetValue(validationContext.ObjectInstance, null);
if (propertyInfo.GetType().IsGenericType && (propertyValue as List<string>) != null && (propertyValue as List<string>).Count > 0)
{
return null;
}
}
return new ValidationResult(FormatErrorMessage(validationContext.DisplayName));
}
public IEnumerable<ModelClientValidationRule> GetClientValidationRules(ModelMetadata metadata, ControllerContext context)
{
var rule = new ModelClientValidationRule
{
ErrorMessage = ErrorMessage,
ValidationType = "atleastonerequired"
};
rule.ValidationParameters["properties"] = string.Join(",", _properties);
yield return rule;
}
}
前もって感謝します、ムラリ