bee*_*s73 6 serialization json json.net validationattribute asp.net-mvc-3
上下文:使用mvc控制器方法创建jsonP服务,该方法提供包含所有验证规则的表单字段的定义.
我的问题是我不知道如何序列化验证属性.在常规Mvc视图中使用不显眼的验证时,我更喜欢与Razor序列化的格式相同的验证属性.
为了序列化为json,我使用NewtonSoft.Json(4.0.2).
模型示例:public class Profile {
[Required(ErrorMessage="This field is required.")]
[StringLength(25, ErrorMessage="Max 25 chars.")]
public string Firstname{get;set;}
}
Run Code Online (Sandbox Code Playgroud)
首选序列化javascript的示例:
{"Firstname": "John",
"ValidationRules":[{"data-val-required":"This field is required.", "data-val-length-max":25, "data-val-length":"Max 25 chars." }]}
Run Code Online (Sandbox Code Playgroud)
非常感谢任何帮助或指示.
这将基于数据注释属性构造具有给定属性的验证属性的字典:
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));
}
}
Run Code Online (Sandbox Code Playgroud)
然后,您应该在自定义JSON序列化代码中使用您的属性序列化validationAttributes字典.
| 归档时间: |
|
| 查看次数: |
2183 次 |
| 最近记录: |