[英]How to reset the formatted ErrorMessages of the validation attributes in ASP.NET MVC?
[英]ASP.NET MVC 2.0 Validation and ErrorMessages
我需要在MVC 2.0中設置DataAnnotation的validate屬性的ErrorMessage屬性。 例如,我應該能夠傳遞ID而不是Model屬性的實際錯誤消息,例如...
[StringLength(2, ErrorMessage = "EmailContentID")]
[DataType(DataType.EmailAddress)]
public string Email { get; set; }
然后使用此ID(“ EmailContentID”)從另一個服務(例如數據庫)中檢索某些內容(錯誤消息)。 然后,錯誤錯誤消息將顯示給用戶,而不是ID。 為此,我需要設置DataAnnotation驗證屬性的ErrorMessage屬性。
通過重寫DataAnnotationsModelValidatorProvider的受保護重寫IEnumerable GetValidators(ModelMetadata元數據,ControllerContext上下文,IEnumerable屬性),這似乎是一項艱巨的任務。
但是現在很復雜...
答:MVC DatannotationsModelValidator的ErrorMessage屬性是只讀的。 所以我不能在這里設置任何內容B. System.ComponentModel.DataAnnotationErrorMessage屬性(獲取並設置)已在MVC DatannotationsModelValidator中設置,因此無法再次設置。 如果嘗試設置它,則會出現“該屬性不能設置多次...”錯誤消息。
public class CustomDataAnnotationProvider : DataAnnotationsModelValidatorProvider
{
protected override IEnumerable<ModelValidator> GetValidators(ModelMetadata metadata, ControllerContext context, IEnumerable<Attribute> attributes)
{
IEnumerable<ModelValidator> validators = base.GetValidators(metadata, context, attributes);
foreach (ValidationAttribute validator in validators.OfType<ValidationAttribute>())
{
messageId = validator.ErrorMessage;
validator.ErrorMessage = "Error string from DB And" + messageId ;
}
//......
}
}
誰能給我正確的方向嗎?
提前致謝。
我個人不會創建一個繼承原始提供程序的新提供程序,但會創建一個繼承ValidationAttribute或StringLengthAttribute的新屬性。
像這樣
public class MyNewValidationAttribute : StringLengthAttribute
{
public int ErrorMessageId
{
set {
var myErrorMessageFromDB = ""; //query database and get message.
this.ErrorMessage = myErrorMessageFromDB;
}
}
}
現在,當您分配屬性時
[StringLength(2, ErrorMessageId = 1 //equals id from database
)]
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.