我想通过继承StringLengthAttribute
创建一个自定义属性。这样做的原因是因为我需要使用动态错误消息。默认的ErrorMessage仅支持常量消息。当我使用不带恒定消息的默认验证时,它可以正常工作。
public class CustomerProfile
{
public string Username { get; set; }
[StringLength(10,ErrorMessage ="Original Error Message")]
public string Name { get; set; }
public string Mobile { get; set; }
public string Email { get; set; }
}
但是当我使用下面的代码创建自定义消息时,它显示为弹出警报框,而不是在文本框上方显示验证消息。
public class CustomerProfile
{
public string Username { get; set; }
//[StringLength(10,ErrorMessage ="Original Error Message")]
[MaxNameLengthAttributes(10)]
public string Name { get; set; }
public Gender Gender { get; set; }
public string Mobile { get; set; }
public string Email { get; set; }
}
public class MaxNameLengthAttributes : StringLengthAttribute
{
private readonly int _maxWords;
public MaxNameLengthAttributes(int maxWords) : base(maxWords)
{
_maxWords = maxWords;
}
protected override ValidationResult IsValid(object value, ValidationContext validationContext)
{
if (value == null)
return new ValidationResult("Name required");
var textValue = value.ToString();
if (textValue.Length <= _maxWords)
return ValidationResult.Success;
var errorMessage = string.Format("max length is {0}",_maxWords);
return new ValidationResult(errorMessage);
}
}
如何通过继承默认属性来创建自定义消息,并在文本框而不是弹出警报框上方显示验证消息?
备注:
如果继承StringLength属性,则可以正常使用而不使用IClientValidatable。而且消息应该不会成为弹出警报,缺少任何一部分?
答案 0 :(得分:-1)
[Remote("MaxNameLengthAttributes", "ControllerName", AdditionalFields = "Id", HttpMethod = "POST",
ErrorMessage = "max length is 10")]
public virtual string Name { get; set; }
然后您可以在控制器中添加类似的方法
[HttpPost]
public JsonResult MaxNameLengthAttributes(string Name, long? id)
{
if(Name.Length<10)
return Json(false);
else
return Json(true);
}
也许对您有帮助。