Asp.net mvc 3 服务器端计数上的Textarea和StringLength验证程序';输入';作为两个字符

Asp.net mvc 3 服务器端计数上的Textarea和StringLength验证程序';输入';作为两个字符,asp.net-mvc-3,validation,Asp.net Mvc 3,Validation,我在textarea上有一个StringLength验证器 [StringLength(10, ErrorMessage = "The {0} must be {1} characters or less")] 因此,当我按enter键,然后键入9个字符时,客户端验证不会显示任何错误;但是,如果我提交表单,服务器验证会显示有10个以上的字符 所以在客户端,enter表示一个字符,在服务器上表示两个字符。这是不同的行为 也许我需要实现我自己的验证器来实现它,对吗 或者,我是否可以使用任何验证器代

我在textarea上有一个
StringLength
验证器

[StringLength(10, ErrorMessage = "The {0} must be {1} characters or less")]
因此,当我按enter键,然后键入9个字符时,客户端验证不会显示任何错误;但是,如果我提交表单,服务器验证会显示有10个以上的字符

所以在客户端,
enter
表示一个字符,在服务器上表示两个字符。这是不同的行为

也许我需要实现我自己的验证器来实现它,对吗


或者,我是否可以使用任何验证器代替
StringLength
,来正确验证
textarea
内容长度?

将属性添加到属性中

[RegularExpression(@"^[\s\S]{0,10}$",ErrorMessage="maximun length must be 10")]
那么在你看来,

<%: Html.ValidationMessageFor(m => m.MyText) %>
m.MyText)%%>
在这里查看我的答案:

通过在JS的某处添加以下内容,可以将getLength的默认行为更改为双倍计算换行

$.validator.prototype._getLength = $.validator.prototype.getLength;
$.validator.prototype.getLength = function (value, element) {
// Double count newlines in a textarea because they'll be turned into \r\n by the server. 
    if (element.nodeName.toLowerCase() === 'textarea')
        return value.length + value.split('\n').length - 1;
    return this._getLength(value, element);
};

我最近遇到了同样的问题,但是既然.NET代码和SQL Server都把一个断线看作两个字符,我最终改变了客户端逻辑,也把行中断看作两个字符:

$('textarea[maxlength]').keyup(function () {
    var lineBreaks = $(this).val().split('\n').length - 1;
    var charsUsed = $(this).val().length + lineBreaks;
    if (charsUsed >= maxlength) {
        $(this).val($(this).val().substr(0, maxlength - lineBreaks));
        charsUsed = maxlength;
    }            
    var remaining = maxlength - charsUsed;
    $('#MyCounter').html("<strong>" + remaining + "</strong> characters remaining");
});
$('textarea[maxlength]')。键控(函数(){
var lineBreaks=$(this).val().split('\n').length-1;
var charsUsed=$(this).val().length+换行符;
如果(字符数>=最大长度){
$(this.val($(this.val().substr(0,maxlength-lineBreaks));
charsUsed=最大长度;
}            
var剩余=最大长度-字符数;
$('#MyCounter').html(“”+剩余字符+”剩余字符”);
});

Fixed:return value.length+value.match(/\n/g).length;