2013-12-16 4 views
9

Сценарий, который мне кажется довольно распространенным я пока не нашел хорошего решения. Таким образом, есть приложение ASP.NET-MVC с базой данных MSSQL, находящейся в фоновом режиме. Модель включает класс A со строковым полем Описание, которое должно быть ограничено до 100 символов. Она объявляется следующим образом:Ограничение длины строки строки и разрывов строк

[StringLength(100)] 
    public virtual string Description { get; set; } 

соответствующий столбец в базе данных NVARCHAR с длиной колонки = 100. В пользовательском интерфейсе поле описания представлено textarea с maxlength = 100.

Теперь проблема возникает, когда в текстовом поле появляются разрывы строк. Они интерпретируются как 1 символ на стороне клиента, но на стороне сервера они представлены Environment.NewLine, которая имеет 2 символа (\ r \ n). Таким образом, он превышает длину столбца базы данных (на самом деле проверка на стороне сервера завершается неудачей перед всей исходной информацией, но опускаем проверку для простоты).

Решения, которые я нашел до сих пор является:

  1. Добавьте магию на стороне клиента, чтобы интерпретировать разрыв строки в текстовом поле в виде двух символов. Мне не нравится это решение, так как он может запутать пользователя.
  2. Замените \ r \ n \ n на стороне сервера. Кажется, что взломать может есть некоторые побочные эффекты.
  3. Удалить/увеличить длину столбца в базе данных. Самый простой из (без учета проблемы проверки на стороне сервера), но давайте укажем , что это не так.

Я предполагаю, что помимо этих трех должно быть что-то еще.

ответ

1

Это старая известная проблема с MVC (я не уверен, что она была решена) , но разные браузеры обрабатывают разницу строк по-разному. Мое предложение состоит в том, что вы можете найти в качестве насадки для модели: jQuery validate textarea maxlength bug

Смежные вопросы