6

Bối cảnh: tạo dịch vụ jsonP với các phương thức điều khiển mvc cung cấp định nghĩa về các trường mẫu bao gồm tất cả các quy tắc xác thực.Làm thế nào để serialize một mô hình với tất cả các thuộc tính xác nhận từ các thuộc tính cá nhân?

Vấn đề của tôi là tôi không biết cách tuần tự hóa các thuộc tính xác thực. Tôi thích các thuộc tính xác nhận trong cùng một định dạng khi chúng được tuần tự hóa bởi Razor khi sử dụng xác nhận không phô trương trong các khung nhìn Mvc thông thường.

Để tuần tự hóa thành json, tôi sử dụng NewtonSoft.Json (4.0.2).

Ví dụ về mô hình: public class hồ sơ {

[Required(ErrorMessage="This field is required.")] 
    [StringLength(25, ErrorMessage="Max 25 chars.")] 
    public string Firstname{get;set;} 
    } 

Ví dụ về javascript đăng ưa thích:

 {"Firstname": "John", 
     "ValidationRules":[{"data-val-required":"This field is required.", "data-val-length-max":25, "data-val-length":"Max 25 chars." }]} 

Bất kỳ sự giúp đỡ hoặc gợi ý được rất nhiều đánh giá cao.

Trả lời

7

này sẽ xây dựng một từ điển với các thuộc tính xác nhận cho một tài sản đưa ra dựa trên chú thích dữ liệu thuộc tính:

var metadata = ModelMetadataProviders.Current.GetMetadataForProperty(null, typeof(MyModel), "MyProperty"); 
var validationRules = metadata.GetValidators(ControllerContext).SelectMany(v => v.GetClientValidationRules()); 
var validationAttributes = new Dictionary<string, string>(); 

foreach (ModelClientValidationRule rule in validationRules) 
{ 
    string key = "data-val-" + rule.ValidationType; 
    validationAttributes.Add(key, HttpUtility.HtmlEncode(rule.ErrorMessage ?? string.Empty)); 
    key = key + "-"; 
    foreach (KeyValuePair<string, object> pair in rule.ValidationParameters) 
    { 
     validationAttributes.Add(key + pair.Key, 
      HttpUtility.HtmlAttributeEncode(
       pair.Value != null ? Convert.ToString(pair.Value, CultureInfo.InvariantCulture) : string.Empty)); 
    } 
} 

Sau đó, bạn nên serialize điển validationAttributes với tài sản của bạn trong tùy chỉnh JSON mã serialization của bạn.

+0

Cảm ơn, đây chính xác là những gì tôi đang tìm kiếm. – bees73

+0

bất kỳ đề xuất nào cho Web Api 2? – JenonD