自定义数据注释和客户端验证MVC2 - c#

我的视图模型上有一个属性,它是一个带有value属性的自定义类。

例如

class mycustomobj
{ 
     public int? Value {get; set; } 
}

public class myviewmodel
{
    [DefaultablePercentRange]
    public property mycustomobj { get; set; }
}

我有一个自定义范围属性DefaultablePercentRange,用它装饰了此属性,以便可以检查适当的输入。与此相关的是客户端的相关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“:{” “:0,”最大“:100},” ValidationType“:” defaultablePercentRange“}]}

我的问题是。我如何才能获得正确的属性名称序列化以进行客户端验证,以便我的客户端验证能够正常工作。我的服务器端工作正常。

请让我知道是否有人需要更多信息。

参考方案

我最终通过综合考虑来解决这个问题。

专为mycustomobj创建了一个模型绑定程序,该绑定程序知道如何在mycustomobj上设置值
更改了模板,以便输出.Value,但控件名称仍然只是属性名称

这意味着在发布时绑定回viewmodel时,我可以确保设置了mycustomobj的正确属性。并且在javascript中,由于设置了正确的输入id,因此正确调用了javascript客户端验证代码。

当回复有时是一个对象有时是一个数组时,如何在使用改造时解析JSON回复? - java

我正在使用Retrofit来获取JSON答复。这是我实施的一部分-@GET("/api/report/list") Observable<Bills> listBill(@Query("employee_id") String employeeID); 而条例草案类是-public static class…

改造正在返回一个空的响应主体 - java

我正在尝试使用Retrofit和Gson解析一些JSON。但是,我得到的响应机构是空的。当我尝试从对象中打印信息时,出现NullPointerException。我确保URL正确,并且我也确保POJO也正确。我正在使用jsonschema2pojo来帮助创建POJO类。这是我要解析的JSON{ "?xml": { "@versi…

每个文件合并后添加换行 - python

我有很多类似以下内容的JSON文件:例如。1.json{"name": "one", "description": "testDescription...", "comment": ""} test.json{"name"…

您如何在列表内部调用一个字符串位置? - python

我一直在做迷宫游戏。我首先决定制作一个迷你教程。游戏开发才刚刚开始,现在我正在尝试使其向上发展。我正在尝试更改PlayerAre变量,但是它不起作用。我试过放在列表内和列表外。maze = ["o","*","*","*","*","*",…

Mongo汇总 - javascript

我的收藏中有以下文件{ "_id": ObjectId("54490b8104f7142f22ecc97f"), "title": "Sample1", "slug": "samplenews", "cat": …