После повторного рассмотрения этой проблемы я обнаружил, что проблема возникла из-за панелей обновления.
Проведя дополнительное тестирование, я изучил, что содержится в строке, используя следующий код:
MsgBox(textbox.Text.Contains(vbCr))
MsgBox(textbox.Text.Contains(vbCrLf))
MsgBox(textbox.Text.Contains(vbNewLine))
MsgBox(textbox.Text.Contains(Environment.Newline))
Все четыре утверждения вернули ложь.Это было проверено на строке перед отправкой в базу данных, а также на строке, полученной из базы данных.
С моей точки зрения, в разметке должно было быть что-то, что убирало разрывы строк.Сначала я подумал, что элементы управления Literal, Textbox и Label сделали что-то смешное с разрывами строк при получении в коде позади.Это не так (и было бы странно, если бы Microsoft позволила этому случиться).
Еще раз прочесав код, я обнаружил, что все эти элементы управления находятся внутри UpdatePanel.Вспомнив мой предыдущий негативный опыт с UpdatePanels, я подумал, что это может быть просто виновником.Я удалил его, и вот, разрывы строк не исчезли в коде.Код, который я разместил чуть выше всего, вернул true.
На обеих страницах были элементы управления для отправки текста и отображения текста внутри UpdatePanel.Я обнаружил, что разрывы строк исчезли при извлечении текста со страницы.При отображении текста на странице UpdatePanel никак не изменяет строку.Следующий код работал нормально:
litMessage.Text = messageBody.Replace(Environment.NewLine, "<br/>")
Хотя я все еще не уверен, почему разрывы строк по-прежнему отображались правильно при использовании тега pre
или даже при отображении полученного значения с помощью окна предупреждения javascript.