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

标签 c# javascript model-view-controller asp.net-mvc-2

我的 View 模型上有一个属性,它是一个带有值属性的自定义类。

例如

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);
};

}

我还在我的 View 上使用 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,"最大":100},"ValidationType":"defaultablePercentRange"}]}

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

如果有人需要更多信息,请告诉我。

最佳答案

我最终通过综合多种因素解决了这个问题。

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

这意味着当绑定(bind)回 post 上的 View 模型时,我可以确保在 mycustomobj 上设置了正确的属性。在 javascript 中,当设置正确的输入 ID 时,会适本地调用 javascript 客户端验证代码。

关于c# - 自定义数据注释和客户端验证 MVC2,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6570279/

相关文章:

javascript - 实时密码规则检查器?

javascript - Three.js 加载导出的 blender 模型

java - @Valid 在 Spring java 中不起作用

model-view-controller - MVC 客户端验证事件

javascript - Vue 组件 - 将 prop 传递到类中不起作用?

c# - 在 action 中获取生成的 html 文件

c# - 代码忽略了 PrincipalPermission 属性?

c# - 即使 Roslyn Diagnostic Analyzer 出现一些错误,编译也成功了

asp.net-mvc - asp.net MVC 显示模板和编辑器模板命名约定

C#/VS2008 : Add separate debug/release references to a project