2014-07-04 14 views
5

Tôi có một mô hình đơn giản:ASP.NET MVC - Làm thế nào để sử dụng thông điệp yêu cầu bên trong một EditorTemplates

public abstract class Person 
    { 
     [Required(ErrorMessage = "Il nome è obbligatorio!!!")] 
     [UIHint("txtGeneric")] 
     [Display(Name = "Nome")] 
     public string Name { get; set; } 

     [Required(ErrorMessage = "Il cognome è obbligatorio!!!")] 
     [UIHint("txtGeneric")] 
     [Display(Name = "Cognome")] 
     public string Surname { get; set; } 

     [Required(ErrorMessage = "L'email è obbligatoria e deve essere in formato valido ([email protected])!!!")] 
     [UIHint("txtEmail")] 
     [Display(Name = "E-mail")] 
     public string Email { get; set; } 
} 

Tôi tạo ra bên trong EditorTemplate file txtGeneric.cshtml. Nó giống như thế này:

@model string 
<input name="@ViewData.TemplateInfo.HtmlFieldPrefix" id="@ViewData.TemplateInfo.HtmlFieldPrefix" data-validation="required" data-validation-error-msg="MESSAGE_TO_PUT" value="@Model" /> 

Tôi muốn biết cách lấy văn bản có liên quan Errormessage thuộc tính Bắt buộc để đưa vào tệp txtGeneric.cshtml của tôi. Tôi có thể làm như thế nào?

Cảm ơn

+0

Có hai cách để thiết lập xác nhận. 1. @ Html.ValidationSummary() // cho mô hình hoàn chỉnh 2. @ Html.ValidationMessageFor (/ * expression * /) // cho thuộc tính mô hình đã chọn. Dường như bạn đang thiếu trình trợ giúp xác thực. –

+0

Vâng, tôi biết trình trợ giúp xác thực mà tôi sẽ sớm đưa ra, điều tôi muốn có một chút khác biệt ... Tôi muốn nhận được giá trị văn bản của thông báo cho yêu cầu mà tôi đặt vào mô hình bên trong mẫu custon (cho mục đích javascript tùy chỉnh) ... là có thể?!? – pinguinone

+0

Bạn có thể sử dụng jquery và truy xuất văn bản bên trong. kiểm tra html được hiển thị của trình trợ giúp xác thực và nhận được innertxt của nó. –

Trả lời

5

này hoạt động:

@{ 
    string requiredMsg = ""; 
    foreach (var attr in @Html.GetUnobtrusiveValidationAttributes(@ViewData.TemplateInfo.HtmlFieldPrefix, @ViewData.ModelMetadata)) 
    { 
     if (attr.Key == "data-val-required") { 
      requiredMsg = attr.Value.ToString(); 
     } 
    } 
} 

hay này:

@{ 
    string requiredMsg = ""; 
    IEnumerable<ModelClientValidationRule> clientRules = ModelValidatorProviders.Providers.GetValidators(ViewData.ModelMetadata, ViewContext).SelectMany(v => v.GetClientValidationRules()); 
    foreach (ModelClientValidationRule rule in clientRules) 
    { 
     if (rule.ValidationType == "required") 
     { 
      requiredMsg = rule.ErrorMessage; 
     } 
    } 
} 
3

Sửa đổi mẫu của bạn như thế này:

@model string 
    @Html.TextBoxFor(m => m) 
    @Html.ValidationMessageFor(model => model, "", new { @class = "text-danger" }) 
+0

Theo cách đó, thông báo vallidation phải ở bên ngoài trường nhập được tạo bởi editortemplate ... tôi chỉ muốn truy cập văn bản và tôi muốn đặt bên trong kết quả đầu vào chính nó – pinguinone

+0

Đọc giá trị của thuộc tính 'data-val-required' từ đầu vào được gen hóa' ' –

+0

Không, tôi xin lỗi, nhưng tiếng anh của tôi cũng tệ và lời giải thích của tôi cũng vậy. Tôi muốn nhận được văn bản của thông báo bên trong EditorTemplates một cái gì đó như @ ViewData.TemplateInfo.HtmlFieldPrefix nhưng đối với thông báo bắt buộc – pinguinone

Các vấn đề liên quan