vbCrLf в многострочном текстовом поле отображается только при вызове .Trim ()

У меня есть текстовое поле ASP с TextMode, установленным на MultiLine. У меня возникают проблемы с сохранением символов vbCrLf, когда пользователь пытается вставить в текст разрывы строк. Когда кнопка на странице нажата, я беру текст из элемента управления, обрезаю его с помощью String.Trim и присваиваю это значение свойству String объекта (которое, в свою очередь, присваивает его частной внутренней переменной String. на объекте). Затем объект берет значение из частной внутренней переменной и бросает его в базу данных с помощью вызова хранимой процедуры (параметр SP, в который он помещается, равен nvarchar (4000)).

Страница ASPX:

<asp:UpdatePanel ID="UpdatePanel2" runat="server" RenderMode="Inline" UpdateMode="Conditional"
                ChildrenAsTriggers="true">
  <ContentTemplate>
    <!-- some other controls and things -->
    <asp:TextBox TextMode="MultiLine" runat="server" ID="txtComments" Width="100%" Height="60px" CssClass="TDTextArea" Style="border: 0px;" MaxLength="2000" />
    <!-- some other controls and things -->
  </ContentTemplate>
</asp:UpdatePanel>

код позади:

ProjectRequest.StatusComments = txtComments.Text.Trim

свойство объекта:

Protected mStatusComments As String = String.Empty
Property StatusComments() As String
  Get
    Return mStatusComments.Trim
  End Get
  Set(ByVal Value As String)
    mStatusComments = Value
  End Set
End Property

сохраненный вызов процедуры:

  Common.RunSP(mDBConnStr, "ProjectStatusUpdate", _
    Common.MP("@UID", SqlDbType.NVarChar, 40, mUID), _
    Common.MP("@ProjID", SqlDbType.VarChar, 40, mID), _
    Common.MP("@StatusID", SqlDbType.Int, 8, mStatusID), _
    Common.MP("@Comments", SqlDbType.NVarChar, 4000, mStatusComments), _
    Common.MP("@PCTComp", SqlDbType.Int, 4, 0), _
    Common.MP("@Type", Common.TDSqlDbType.TinyInt, 1, EntryType))

Вот самое странное. Когда я отлаживаю код, если я набираю

"тест
тест"

(без кавычек) в текстовое поле комментариев, затем нажмите кнопку сохранения и используйте немедленное окно для просмотра значений переменных по мере прохождения, вот что я получаю:

?txtComments.Text
"test test"
?txtComments.Text.Trim
"test
test"
?txtComments.Text(4)
"
"c
?txtComments.Text.Trim()(4)
"
"c

Кто-нибудь знает, что здесь происходит?


person Brandon Montgomery    schedule 10.05.2010    source источник
comment
у вас проблемы или просто интересно, что происходит?   -  person lincolnk    schedule 13.05.2010
comment
Я проверил, но получил тестовый тест в обоих случаях   -  person Ravindra Gullapalli    schedule 19.05.2010


Ответы (2)


Здесь есть две проблемы. Во-первых, непосредственное окно в VB преобразует непечатаемый символ в пробел, чтобы вы его не видели. В C # он будет отображать символ, используя его замещающий escape-код (например, \n или \r\n), но VB этого не делает. Во-вторых, VB видит разрыв только как перевод строки (vbLf), а не как возврат каретки + перевод строки (vbCrLf). Таким образом, если вы сделаете следующее в режиме перерыва в немедленном окне, вы увидите, что я имею в виду (если вы наберете test, нажмете Enter, test в поле для комментариев):

?txtComments.Text.Substring(4,1) = vbLf
True
person Thomas    schedule 13.05.2010

Возможно, вам следует использовать константу Environment.NewLine для замены на vbCrLf

person VMAtm    schedule 19.05.2010