2011-05-15 82 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