2011-05-15 79 views
2

我在Datalist中使用了從數據庫中獲取的文本中的文本框。這裏有許多的<br>中的文本,我想換行,而不是<br>,這是什麼樣子:在文本框中替換<br>

((TextBox)(EditProductList.Items[0].FindControl("txtEditDescription"))).Text.Replace("<br>", "\r\n"); 

<asp:DataList ID="EditProductList" runat="server"> 
    <ItemTemplate> 
    <asp:TextBox ID="txtEditDescription" runat="server" TextMode="MultiLine" Height="350px" 
          Width="350px" Text='<%#Eval("Description") %>'></asp:TextBox> 
    </ItemTemplate> 
</asp:DataList> 

我得到的文本,但我得到的<br>爲好。

+3

你知道.Replace返回一個字符串,它不會在裏面做什麼,對吧? – jcolebrand 2011-05-15 16:50:50

+1

僅供參考:如果您使用的主要是純文本,但使用'
'而不是換行符,因爲您正在網絡上顯示,最好的方法是使用換行符存儲純文本,並將其轉換爲'
'當你建立你的標記。這樣你就可以適應新的顯示模式(比如從html4到xhtml從'
'到'
',然後回到'
')html123! – grossvogel 2011-05-15 17:02:53

回答

2

您實際上必須將Replace()返回的字符串再次分配給Text屬性。

var textBox = (TextBox)(EditProductList.Items[0].FindControl("txtEditDescription")); 
textBox.Text = textBox.Text.Replace("<br>", "\r\n"); 
+0

太棒了!效果很好!謝謝! – Nicklas 2011-05-15 16:58:38

+1

找到控件後,請確保TextBox不爲null,然後只替換文本,否則異常將被解僱。 – Maxymus 2011-05-15 18:12:01

+0

@Maxymus優秀的評論。請記住,我們不希望直接使用無關的建議來重載新開發者。但有一點點評論。 – jcolebrand 2011-05-15 19:46:59

1

試試這個(但應重構):

使用你原來的代碼:

((TextBox)(EditProductList.Items[0].FindControl("txtEditDescription"))).Text = 
      ((TextBox)(EditProductList.Items[0].FindControl("txtEditDescription"))).Text.Replace("<br>", "\r\n"); 

而且重構它是這樣的:

TextBox textBox = ((TextBox)(EditProductList.Items[0].FindControl("txtEditDescription"))); 
textbox.Text = textBox.Text.Replace("<br>", "\r\n"); 

請注意,在重構我將用已經找到的控件的引用來替換查找。

我們這樣做的原因是.Replace函數不會改變有問題的對象,它會返回對象的變體版本,可以這麼說。

+0

@Nicklas你可以通過點擊勾號和向上箭頭來顯示你的感謝;)這讓其他人知道這解決了你的問題,並且是你正在尋找的答案。 – jcolebrand 2011-05-15 17:04:39