3

TextModeがMultiLineに設定されたASPTextBoxがあります。ユーザーがテキストに改行を入れようとすると、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

誰かがここで何が起こっているのかについての手がかりを持っていますか?

4

2 に答える 2

10

ここには 2 つの問題があります。まず、VB のイミディエイト ウィンドウは、印刷できない文字をスペースに変換しているため、表示できません。C# では、代替エスケープ コード (\nまたは など\r\n) を使用して文字を表示しますが、VB では表示しません。第 2 に、VB は改行をvbLfキャリッジ リターンとライン フィード ( ) ではなく、ライン フィードのみ ( )として認識しvbCrLfます。したがって、イミディエイト ウィンドウでブレーク モードで次の操作を行うと、私の言いたいことがわかります (コメント ボックスに と入力してtestEnter キーを押すと仮定します)。test

?txtComments.Text.Substring(4,1) = vbLf
True
于 2010-05-13T16:45:01.997 に答える
2

おそらく、定数を使用Environment.NewLineしてvbCrLfに置き換える必要があります

于 2010-05-19T07:08:45.363 に答える