Валидатор Textarea и StringLength на стороне сервера считает 'enter' в виде двух символов - PullRequest
2 голосов
/ 12 сентября 2011

У меня есть StringLength валидатор для textarea

[StringLength(10, ErrorMessage = "The {0} must be {1} characters or less")]

Поэтому, когда я нажимаю enter и затем набираю 9 символов, проверка клиента не выдает никаких ошибок;но если я отправлю форму, проверка сервера скажет, что в ней более 10 символов.

Так, на стороне клиента enter означает один символ, а на сервере - два.Это не то же самое поведение.

Возможно, мне нужно было бы реализовать мой собственный валидатор, который бы это делал, верно?

Или есть ли какие-нибудь валидаторы, которые я могу использовать вместо StringLength, чтобыпроверить textarea длина содержимого правильно?

Ответы [ 3 ]

1 голос
/ 06 июля 2012

Смотрите мой ответ здесь: Символы новой строки в текстовой области увеличивают длину текста в C #

Вы можете изменить поведение по умолчанию для getLength, чтобы удвоить число новых строк, добавив следующее в свой JSгде-то.

$.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);
};
1 голос
/ 12 сентября 2011

Добавить атрибут к вашей собственности

[RegularExpression(@"^[\s\S]{0,10}$",ErrorMessage="maximun length must be 10")]

тогда по вашему мнению

<%: Html.ValidationMessageFor(m => m.MyText) %>
0 голосов
/ 30 августа 2012

У меня недавно была такая же проблема, но так как .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");
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...