我在我的视图模型上有一个属性,它是一个具有值属性的自定义类。自定义数据注解和客户端验证MVC2
例如
class mycustomobj
{
public int? Value {get; set; }
}
public class myviewmodel
{
[DefaultablePercentRange]
public property mycustomobj { get; set; }
}
我有一个自定义的范围属性DefaultablePercentRange我装点这个属性,这样我可以检查apprpiate输入。与此相关的是客户端的相关javascript验证器。
的JavaScript是:
Sys.Mvc.ValidatorRegistry.validators["defaultablePercentRange"] = function (rule) {
var _minimum = rule.ValidationParameters["minimum"];
var _maximum = rule.ValidationParameters["maximum"];
return function (value, context) {
if (!value || !value.length) {
return true; // return true as null values allowed
}
var n = Number.parseLocale(value);
return (!isNaN(n) && _minimum <= n && n <= _maximum);
};
}
我也使用Html.EditorFor对我的看法与模板,以便我能输出属性作为mycustomobj.Value而不仅仅是mycustomobj。因此,在HTML视图属性最终被渲染类似:
<input class="defaultable tiny" default="0" defaultwhen="0" id="mycustomobj_Value" name="mycustomobj.Value" type="text" value="" placeholder="0" style="">
现在我的问题是JavaScript验证空突入我的客户方的验证功能。经过相当数量的调查后,我发现这是因为为我的自定义DataAnnotationsModelValidator创建的JSON未使用属性的完整ID。例如创建的JSON是:
{"FieldName":"mycustomobj","ReplaceValidationMessageContents":true,"ValidationMessageId":"mycustomobj_validationMessage","ValidationRules":[{"ErrorMessage":"This value must be in the range 0 - 100","ValidationParameters":{"minimum":0,"maximum":100},"ValidationType":"defaultablePercentRange"},{"ErrorMessage":"This value must be in the range 0 - 100","ValidationParameters":{"minimum":0,"maximum":100},"ValidationType":"defaultablePercentRange"}]}
,我需要: { “字段名”: “mycustomobj.value”, “ReplaceValidationMessageContents”:真实的, “ValidationMessageId”: “mycustomobj_value_validationMessage”, “ValidationRules”:[{ “ErrorMessage”:“此值必须在0-100范围内”,“ValidationParameters”:{“minimum”:0,“maximum”:100},“ValidationType”:“defaultablePercentRange”},{“ErrorMessage”:“该值必须在0-100的范围内,“ValidationParameters”:{“minimum”:0,“maximum”:100},“ValidationType”:“defaultablePercentRange”}]}
我的问题是。我怎样才能得到正确的属性名称序列化为客户端验证,以便我的客户端验证将工作。我的serverside工作得很好。
如果有人需要更多信息,请让我知道。