MVC 3 jQuery自定义验证器

时间:2012-02-12 14:15:09

标签: jquery asp.net-mvc-3

我正在努力使用自定义jQuery验证器,这是我的第一次尝试,我认为我非常接近。我正在尝试验证一个数字(出价)与我正在建立的拍卖系统的最低出价,问题是最低出价总是十进制数,例如15.50,但出价可能是整数16.我认为我的逻辑正在下降,因为我正在验证整数对小数点我试图将输入的数字转换为小数,但这似乎打破了一切。以下是我的功能副本。

$.validator.addMethod("bidgreaterthan", function (value, element, params) {
var parts = element.name.split(".");
var bid = value.toFixed(2);
var prefix = "";
if (parts.length > 1)
    prefix = parts[0] + ".";
var currentbidvalue = $('input[name="' + prefix + params.propertytested + '"]').val();
if (!bid || !currentbidvalue)
    return true;
if (bid < (currentbidvalue))
    return false;
});

我可能会很富裕,这可能是其他问题,但任何帮助都会受到赞赏。

2 个答案:

答案 0 :(得分:1)

内置的远程验证机制有什么问题可以让这更容易?出价验证将在远程验证控制器中进行。看一下网上提供的一些文章:

http://deanhume.com/Home/BlogPost/mvc-3-and-remote-validation/51

答案 1 :(得分:0)

在Javascript中比较浮点数(带小数的数字)和整数(整数)应无需任何转换。

16 > 15.50 // -> true

但是,在输入字段上调用val()可能会产生一个字符串。如果您不确定要比较的数字格式是什么,强制转换为浮点数总是一个好主意(尽管Javascript可能会为您转换):

parseFloat("16") > parseFloat("15.50") // -> true

在你的情况下,这也应该是最安全的方法,因为即使将一个整数转换为一个浮点数,自然仍会返回正确的结果,如下所示:

parseFloat(16) // -> 16.0

因此,在您的情况下,您可以按照以下方式执行某些操作:

var bid         = parseFloat(value);
currentbidvalue = parseFloat(currentbidvalue);

return currentbidvalue > bid;

但是,在进行任何转换之前,可能会检查是否存在值/出价值。