Проблемы с разрывом строки TEXTAREA в ASP.NET MVC 2 - PullRequest
1 голос
/ 14 июня 2011

Я действительно не думаю, что это имеет какое-либо отношение к самому ASP.NET MVC 2, но я упоминаю, что, поскольку это среда, в которой я работаю, и по крайней мере один аспект моей проблемы связан с тем, как MVC 2ведет себя.Моя проблема заключается в следующем:

У меня есть элемент TEXTAREA в форме, который позволяет вводить несколько строк данных.Когда форма отправляется обратно на сервер (с использованием IE8), я вижу, что данные отформатированы как «A \ n \ rB \ n \ rC \ n \ rD».Затем я сохраняю эти данные в таблицу базы данных, где они отображаются точно так же.Однако, когда я вернусь на страницу позже, загрузив данные из базы данных и установив их в качестве значения элемента TEXTAREA, он отображает «\ n \ r» в виде буквенных символов вместо разрывов строки!

В качестве дополнительного примечания, если в ASP.NET MVC я следую стандартному подходу if (!ModelState.IsValid) return View(viewModel);, TEXTAREA отображается нормально при повторном рендеринге той же формы из-за ошибки проверки.Это говорит мне о том, что проблема должна быть связана с сохранением и извлечением данных в / из базы данных (SQL Server).

У меня такая же проблема с отображением в FireFox и Chrome с заметным отличием в том, что данныеотформатированный как "A \ r \ nB \ r \ nC \ r \ nD" при отправке из этих браузеров.

С этими различиями в поведении, как я могу обрабатывать постоянные многострочные данные из TEXTAREA, которые будут отображатьправильно во ВСЕХ браузерах?

Ответы [ 2 ]

2 голосов
/ 29 июня 2011

Вы должны заменить \ r \ n char тегом
и создать MvcHtmlString, когда вы хотите визуализировать текст, я использую это:

@(MvcHtmlString.Create(Model.Text.Replace("\r\n","<br/>").Replace("\n\r","<br/>)))

Model.Text - это текст из TextArea, я протестировал эту строку кода, и она работает также во всех пяти основных браузерах (IE, FF, Chrome, Opera, Safari).

0 голосов
/ 15 июня 2011

Я не нашел фактического решения, но реализовал обходной путь.

Когда я устанавливаю для свойства моего объекта заданное значение из TEXTAREA, я выполняю замену текста регулярным выражением напреобразуйте любые символы, возвращаемые из браузера, в '\ n', который работает как разрыв строки во всех браузерах, которые я проверял (IE8, Chrome & FireFox).Вот код, который я использую (в .NET):

cleanValue = Regex.Replace(value, "(\\n|\\\\n|\\r|\\\\r)+", "\n", RegexOptions.IgnoreCase);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...