上下文:使用 mvc 控制器方法创建 jsonP 服务,该服务提供表单字段的定义,包括所有验证规则。
我的问题是我不知道如何序列化验证属性。我更喜欢验证属性的格式与在常规 Mvc 视图中使用不显眼的验证时由 Razor 序列化的格式相同。
为了序列化为 json,我使用 NewtonSoft.Json (4.0.2)。
型号示例:
公开课简介{
[Required(ErrorMessage="This field is required.")]
[StringLength(25, ErrorMessage="Max 25 chars.")]
public string Firstname{get;set;}
}
首选序列化 JavaScript 的示例:
{"Firstname": "John",
"ValidationRules":[{"data-val-required":"This field is required.", "data-val-length-max":25, "data-val-length":"Max 25 chars." }]}
非常感谢任何帮助或指示。
这将根据数据注释属性构造一个具有给定属性的验证属性的字典:
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));
}
}
然后,您应该使用自定义 JSON 序列化代码中的属性来序列化validationAttributes 字典。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)