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

时间:2014-11-25 00:05:21

标签: jquery asp.net-mvc validation

我正在使用ASP.NET MVC Web应用程序。我在视图中有一个textarea,它与一个最大长度为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.这导致不匹配。我该如何解决这个问题?

1 个答案:

答案 0 :(得分:1)

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

有许多方法可以尝试解决这个问题,并提供不同程度的正确性。"以下是一些解决此问题的帖子:

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

  1. 以忽略\r字符和
  2. 的方式编写长度检查算法
  3. 在服务器端验证之前,使用发送到服务器的字符串中的a model binder that removes \r characters
  4. 但是,请记住,这可能会产生一些意想不到的结果。例如,如果用户根据他们已保存的输入下载文件,然后在记事本(仅将\r\n组合作为换行符识别)等程序中打开,则他们将无法看到该行符。