使用 MVC3 和 jQuery 对整数进行不显眼的验证

发布于 2024-11-16 18:56:03 字数 164 浏览 6 评论 0原文

不引人注目的验证不区分数据类型。 MVC 仅向所有数字字段添加“数字”验证。

这会产生不良影响,因为 1.2345 是一个有效整数。当您提交时,MVC 绑定器无法解析该值。因此,您不会从服务器获取客户端错误,而是从服务器获取错误。

解决这个问题的最佳方法是什么?有现成的解决方案吗?

Unobtrusive validation does not distinguish between data types. There's only 'number' validation that MVC adds to all numeric fields.

This has an unwanted effect of 1.2345 being a valid integer. When you submit, MVC binder cannot parse the value. So instead of getting a client-side error you get it from server.

What is the best way of solving this? Are there existing solutions?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

骷髅 2024-11-23 18:56:03

好的,这就是我所做的。

为 Int32 编写了我自己的 EditorTemplate (Views/Shared/EditorTemplates/Int32.cshtml):

@model int?           
@Html.TextBox("", Model.HasValue ? Model.Value.ToString() : "", new { data_val_integer = "Field must be an integer" }) 

添加了一个验证适配器(在 $(document).ready 上运行此适配器:)

jQuery.validator.addMethod('integer',
    function (value, element, params) {
        return String.IsNullOrEmpty(value) || isInteger(value);
    });

jQuery.validator.unobtrusive.adapters.add("integer", [],
    function (options) {
        options.rules['integer'] = {};
        options.messages['integer'] = options.message;
    });

编写了如下所示的 Javascript 函数 isInteger

function isInteger(value) {
    return parseInt(value, 10) == value;
}

现在如果您键入任何带有小数点的内容,整数字段会给出一个很好的消息“字段必须是整数”。

将很高兴听到更好的方法。

Ok, here's what I did.

Wrote my own EditorTemplate for Int32 (Views/Shared/EditorTemplates/Int32.cshtml):

@model int?           
@Html.TextBox("", Model.HasValue ? Model.Value.ToString() : "", new { data_val_integer = "Field must be an integer" }) 

Added a validation adapter (run this on $(document).ready:)

jQuery.validator.addMethod('integer',
    function (value, element, params) {
        return String.IsNullOrEmpty(value) || isInteger(value);
    });

jQuery.validator.unobtrusive.adapters.add("integer", [],
    function (options) {
        options.rules['integer'] = {};
        options.messages['integer'] = options.message;
    });

Wrote Javascript function isInteger that looks like this

function isInteger(value) {
    return parseInt(value, 10) == value;
}

Now integer fields give a nice message "Field must be an integer" if you type anything with decimal dot in it.

Will be glad to hear of a better way.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文