Сценарий, который мне кажется довольно распространенным я пока не нашел хорошего решения. Таким образом, есть приложение 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). Таким образом, он превышает длину столбца базы данных (на самом деле проверка на стороне сервера завершается неудачей перед всей исходной информацией, но опускаем проверку для простоты).
Решения, которые я нашел до сих пор является:
- Добавьте магию на стороне клиента, чтобы интерпретировать разрыв строки в текстовом поле в виде двух символов. Мне не нравится это решение, так как он может запутать пользователя.
- Замените \ r \ n \ n на стороне сервера. Кажется, что взломать может есть некоторые побочные эффекты.
- Удалить/увеличить длину столбца в базе данных. Самый простой из (без учета проблемы проверки на стороне сервера), но давайте укажем , что это не так.
Я предполагаю, что помимо этих трех должно быть что-то еще.