我在textarea上有StringLength
验证器
[StringLength(10, ErrorMessage = "The {0} must be {1} characters or less")]
因此,当我按enter
然后键入9个字符时,客户端验证不会显示任何错误;但是如果我提交表单,服务器验证会说有超过10个字符。
因此,在客户端enter
表示一个字符,在服务器上表示两个字符。这是不一样的行为。
可能我需要实现我自己的验证器,对吧?
或者我可以使用任何验证器代替StringLength
,以正确验证textarea
内容长度吗?
答案 0 :(得分:1)
为您的媒体资源添加属性
[RegularExpression(@"^[\s\S]{0,10}$",ErrorMessage="maximun length must be 10")]
然后在你看来
<%: Html.ValidationMessageFor(m => m.MyText) %>
答案 1 :(得分:1)
请在此处查看我的回答:New line characters in text area increases text length in C#
您可以通过将以下内容添加到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);
};
答案 2 :(得分:0)
我最近遇到了同样的问题,但由于.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");
});