2011-07-04 54 views
1

我在我的视图模型上有一个属性,它是一个具有值属性的自定义类。自定义数据注解和客户端验证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工作得很好。

如果有人需要更多信息,请让我知道。

回答

0

我最终通过使用综合因素来解决这个问题。

  • 创建了一个模型绑定专为mycustomobj知道如何设置mycustomobj
  • 改变模板中的值,使得.value的是输出,但该控件的名称还只是属性名称

这意味着在绑定到视图模型后,我可以确保在mycustomobj上设置了正确的属性。而在JavaScript的JavaScript客户端验证代码被正确称为正确的输入ID被设置。

相关问题