Scenariusz, który mam wydaje się dość powszechny, ale do tej pory nie znalazłem dobrego rozwiązania. Jest więc aplikacja ASP.NET-MVC z bazą danych MSSQL znajdującą się w back-endzie. Model zawiera klasę A z polem tekstowym Opis, która musi być ograniczona do 100 znaków. To zadeklarowana następująco:Ograniczenie długości linii ciągów i łamanie linii
[StringLength(100)]
public virtual string Description { get; set; }
odpowiedniej kolumny w bazie danych to nvarchar z długości kolumny = 100. W interfejsie użytkownika pole opisu jest reprezentowane przez textarea z maxlength = 100.
Teraz pojawia się problem, gdy w obszarze tekstowym występują przerwy linii. Są interpretowane jako 1 znak po stronie klienta, ale po stronie serwera są reprezentowane przez środowisko. Nowa linia, która ma 2 znaki (\ r \ n). Tak więc przekracza ona długość kolumny bazy danych (w rzeczywistości sprawdzanie poprawności po stronie serwera kończy się niepowodzeniem przed całą zawartością back-end, ale pomińmy poprawność dla prostoty).
Rozwiązania znalazłem do tej pory to:
- Dodaj trochę magii po stronie klienta w celu interpretacji wiersza przerwę w textarea jako dwa znaki. Nie podoba mi się to rozwiązanie, ponieważ może ono pomylić użytkownika.
- Zastąp symbol \ r \ n \ n po stronie serwera. Wygląda jak włamanie, które może spowodować pewne skutki uboczne.
- Usuń/zwiększ długość kolumny w bazie danych. Najprostszy z nich, (bez uwzględniania problemu sprawdzania poprawności po stronie serwera), ale niech to będzie , nie jest tak.
Chyba powinno być coś jeszcze oprócz tych trzech.