Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
asp.net mvc textarea与jQuery中换行符的字符计数_Jquery_Asp.net Mvc_Validation - Fatal编程技术网

asp.net mvc textarea与jQuery中换行符的字符计数

asp.net mvc textarea与jQuery中换行符的字符计数,jquery,asp.net-mvc,validation,Jquery,Asp.net Mvc,Validation,我正在开发一个ASP.NET MVC web应用程序。我在视图中有一个文本区域,它绑定到一个最大长度为1000的模型 //Html: @Html.TextAreaFor(model => model.Description, 12, 50, new { @class = "form-control", @placeholder = "Mandatory" }) //Model class: [Required] [DisplayName("Event Description")] [Ma

我正在开发一个ASP.NET MVC web应用程序。我在视图中有一个文本区域,它绑定到一个最大长度为1000的模型

//Html:
@Html.TextAreaFor(model => model.Description, 12, 50, new { @class = "form-control", @placeholder = "Mandatory" })

//Model class:
[Required]
[DisplayName("Event Description")]
[MaxLength(1000, ErrorMessage = "Maximum {1} characters.")]
public string Description { get; set; }
我还使用jQuery为用户显示一条消息,以便他们知道还有多少字符需要输入:

    $('#Description').keyup(function () {
        var maxlen = 1000;
        var count = $(this).val().length;
        var charLeft = maxlen - count;
        var string = charLeft + " chracters left"
        if (count > maxlen) {
            this.value = this.value.substring(0, maxlen);
        }
        else {
            $("#descriptionCharCount").text(string);
        }
    });

我发现当输入新行时,ASP.NET将插入2个空格,从而将字符数增加2。但是jQuery只增加了1。这导致了不匹配。如何解决此问题?

原因:Windows使用两个字符(
\r\n
)表示新行,而某些浏览器仅使用其中一个字符(
\n
)。因此,当模型绑定器将输入转换为字符串时,实际上有一个使用两个字符的字符串

解决这个问题的方法有很多,但“正确性”的程度各不相同。以下是一些解决这个问题的帖子:

在我看来,最正确的方法是双管齐下:

  • 以忽略
    \r
    字符的方式编写长度检查算法,然后
  • 在服务器端验证之前,使用发送到服务器的字符串

  • 但是,请记住,这可能会产生一些意想不到的结果。例如,如果用户根据保存的输入下载一个文件,然后在记事本之类的程序中打开它(该程序只将
    \r\n
    组合框识别为换行符),他们将不会看到换行符。

    感谢您的快速响应。我将“有点”使用第一种方法。但我会做相反的事情,在jQuery长度计算中用'\r\n'替换'\n'。是的,我一开始考虑过,但我认为如果按Enter键,看到字符数增加2,可能会让人感到困惑。