Mam ten problem w mojej aplikacji mvc asp.net.Nowe znaki linii w obszarze tekstowym zwiększają długość tekstu w C#
W jednym z moich modeli znajduje się pole "Opis". Kolumna bazy danych dla tych pól jest ustawiona na NVarchar(300)
.
Moim zdaniem, tworzę obszar tekstowy w następujący sposób.
@Html.TextAreaFor(m => m.Description, new { maxlength = "300" })
Używam "jquery.validate.unobtrusive.min.js" do sprawdzania poprawności strony klienta. Więc kiedy użytkownik wpisze w polu tekstowym i długość treści przekroczy 300 znaków, wyświetli komunikat "Proszę podać nie więcej niż 300 znaków".
Wszystko działa poprawnie, dopóki nie pojawi się następujący sceanario. Użytkownik wprowadza następujące dane w polu tekstowym.
f
f
f
f
f
f
f
f
sdfa
(Ta zawartość 8 nowe linie)
Według „dyskretnego” walidacji Zawartość ta ma długość 300 (liczenie każdej nowej linii „\ n”, jako pojedynczego znaku) więc przechodzi walidację i posty z powrotem.
W moim kodu C#, ze względu na Kodowanie, sama treść staje fo długości 308 (licząc każdą nową linię „\ r \ n” jak 2 znaków) które w tern nie przejdzie operację bazy danych, gdyż pozwala jedynie 300 postacie.
Jeśli ktoś mówi, że powinienem mieć atrybut StringLength
na tej konkretnej właściwości, mam następujący powód, dla którego go nie posiadam.
Jeśli wstawię ten atrybut, walidacja po stronie klienta nie nastąpi dla tej konkretnej właściwości, przechodzi do serwera, a ponieważ model jest nieprawidłowy, wraca do strony z komunikatem o błędzie.
Proszę mi doradzić, jakie może być możliwe rozwiązanie tego problemu?
Podział nie zadziałał dla mnie. Miałem problem z końcowymi podziałami linii, które nie zostały policzone przy użyciu Twojej metody. Użyłem tego zamiast: '// zamienia znaki nowej linii na 2 spacje, aby liczba pasowała do serwera. zmieniony replaceValue = value.replace (/ (\ n)/gm, ""); return replaceValue.length; ' Uwaga: blok kodu w jakiś sposób pokazuje tylko jedno miejsce, w którym powinny znajdować się dwa. – Ben