【发布时间】:2011-07-04 10:34:18
【问题描述】:
我的视图模型上有一个属性,它是一个具有值属性的自定义类。
例如
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 中的 view 属性最终被渲染为:
<input class="defaultable tiny" default="0" defaultwhen="0" id="mycustomobj_Value" name="mycustomobj.Value" type="text" value="" placeholder="0" style="">
现在我的问题是 javascript 验证将 null 传递给我的客户端验证器函数。经过大量调查后,我发现这是因为为我的自定义 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"}]}
我需要的地方: {"FieldName":"mycustomobj.value","ReplaceValidationMessageContents":true,"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"}]}
我的问题是。如何为客户端验证序列化正确的属性名称,以便我的客户端验证正常工作。我的服务器端工作正常。
如果有人需要更多信息,请告诉我。
【问题讨论】:
标签: c# javascript model-view-controller asp.net-mvc-2