2013-12-16 14 views
9

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:

  1. 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.
  2. Zastąp symbol \ r \ n \ n po stronie serwera. Wygląda jak włamanie, które może spowodować pewne skutki uboczne.
  3. 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.

Odpowiedz

1

Jest to stary i znany problem z MVC (nie jestem pewien, czy został rozwiązany) , ale różne przeglądarki traktują inaczej podział linii. Moja sugestia dotyczy niestandardowego spoiwa modelowego, takiego jak to, co można znaleźć tutaj: jQuery validate textarea maxlength bug

Powiązane problemy