【问题标题】:Character count for newline in asp.net mvc textarea vs jQueryasp.net mvc textarea vs jQuery中换行符的字符数
【发布时间】:2014-11-25 00:05:21
【问题描述】:

我正在开发一个 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。这导致不匹配。我该如何解决这个问题?

【问题讨论】:

    标签: jquery asp.net-mvc validation


    【解决方案1】:

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

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

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

    1. 以忽略\r 字符的方式编写长度检查算法,并且
    2. 在服务器端验证之前使用来自发送到服务器的字符串中的a model binder that removes \r characters

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

    【讨论】:

    • 感谢您的快速回复。我会“有点”使用第一种方法。但我会做相反的事情,即在 jQuery 长度计算中将 '\n' 替换为 '\r\n'。
    • 是的,一开始我也在考虑这个问题,但认为按下 Enter 并看到他们的字符数增加 2 可能会让人们感到困惑。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-03-06
    • 2016-02-10
    • 2013-12-26
    • 1970-01-01
    • 2014-06-27
    • 1970-01-01
    • 2014-08-16
    相关资源
    最近更新 更多