2014-11-25 35 views
2

我正在研究ASP.NET MVC Web應用程序。我在查看一個文本,它的綁定到具有我也使用jQuery,讓他們知道有多少個字符留下來爲用戶顯示一個消息1000asp.net mvc textarea vs jQuery的換行符字符數

//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; } 

最大長度的模型輸入:

$('#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。這增加導致的不匹配。我該如何解決這個問題?

回答

0

爲什麼會發生這種情況:Windows使用兩個字符(\r\n)表示新行,而某些瀏覽器僅使用其中一個字符(\n)。因此,當模型聯編程序將輸入轉換爲字符串時,實際上有一個使用兩個字符的字符串。

有很多方法可以嘗試解決這個問題,具有不同程度的「正確性」。這裏有一些職位,解決該問題:

在我看來,最正確的做法是採取雙管齊下的方法:

  1. 以忽略的方式編寫長度檢查算法字符和
  2. 在服務器端驗證之前,使用發送到服務器的字符串使用a model binder that removes \r characters

但是,請記住,這可能會有一些意想不到的結果。例如,如果用戶根據他們保存的輸入文件下載文件,然後在記事本程序(僅將\r\n組合框識別爲換行符)中打開它,則不會看到換行符。

+0

感謝您的快速響應。我會「使用第一種方法」。但是我會做相反的事情,在jQuery長度計算中用'\ r \ n'替換'\ n'。 – Dean 2014-11-25 00:55:18

+0

是的,我一開始就在考慮這個,但是認爲它可能會讓人誤以爲輸入並且看到他們的人物數量增加2。 – StriplingWarrior 2014-11-25 22:40:29