2010-05-10 4 views
3

TextMode가 MultiLine으로 설정된 ASP TextBox가 있습니다. 사용자가 텍스트에 줄 바꿈을 넣으려고 할 때 vbCrLf 문자를 유지하는 데 문제가 있습니다. 페이지의 단추를 누르면 컨트롤에서 텍스트를 가져 와서 String.Trim을 사용하여 트리밍 한 다음이 값을 개체의 String 속성에 할당합니다. 그러면이 값을 개체의 내부 String 변수에 할당합니다 개체에). 그런 다음 개체는 개인 내부 변수에서 값을 가져 와서 저장 프로 시저 호출 (SP 매개 변수는 nvarchar (4000) 임)을 사용하여 데이터베이스에 던집니다.Multiline TextBox의 vbCrLf는 .Trim()이 호출 될 때만 나타납니다.

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 

여기에 무슨 일이 일어나는지 실마리가 있습니까?

+0

문제가 있거나 계속 진행되고 있는지 궁금하십니까? – lincolnk

+0

나는 그것을 검사했다. 그러나 나는 양쪽 경우 모두에서 "test test"를 얻었다. –

답변

8

여기에는 두 가지 문제가 있습니다. 첫째, VB의 직접 실행 창은 인쇄 할 수없는 문자를 공백으로 변환하여 볼 수 없도록합니다. C#에서는 대체 이스케이프 코드 (예 : \n 또는 \r\n)를 사용하여 문자를 표시하지만 VB는 표시하지 않습니다. 둘째, VB는 줄 바꿈이 캐리지 리턴 + 줄 바꿈 (vbCrLf)이 아닌 줄 바꿈 (vbLf)으로 간주합니다. 당신이 Environment.NewLine을 사용해야

?txtComments.Text.Substring(4,1) = vbLf 
True 
2

될 수 있습니다 : 당신이 직접 실행 창에 중단 모드에서 다음을 수행하는 경우 따라서, 당신이 무슨 뜻인지 볼 것이다 (당신이 test을 입력 가정, 코멘트 상자에 test를 Enter 키를 누르십시오) vbCrLf로 대체 할 상수

관련 문제