2009-06-08 23 views
8

Tôi hiện đang tạo một ứng dụng bằng ASP.NET MVC. Tôi nhận được một số đầu vào của người dùng bên trong một vùng văn bản và tôi muốn hiển thị văn bản này với < br/> s thay vì dòng mới. Trong PHP có một hàm gọi là nl2br, nó thực hiện chính xác điều này. Tôi tìm kiếm trên web tương đương trong ASP.NET/C#, nhưng không tìm thấy một giải pháp phù hợp với tôi.Hiển thị các dòng mới từ vùng văn bản trong ASP.NET MVC

Một nắm tay được này (không làm gì cả đối với tôi, ý kiến ​​chỉ in mà không cần dây chuyền mới):

<% 
    string comment = Html.Encode(Model.Comment); 
    comment.Replace("\r\n", "<br />\r\n"); 
%> 
<%= comment %> 

Điều thứ hai tôi thấy được này (Visual Studio nói với tôi vbCrLf không có sẵn trong bối cảnh này - tôi đã thử nó trong xem và điều khiển):

<% 
    string comment = Html.Encode(Model.Comment); 
    comment.Replace(VbCrLf, "<br />"); 
%> 
<%= comment %> 
+1

Bạn có chắc chắn các ngắt dòng đang thực sự "\ r \ n" không chỉ là "\ n", và, "\ r" hoặc "\ n \ r"? –

+0

Theo như tôi biết, trong các ngắt dòng trên thế giới Windows là \ r \ n;) - nhưng tôi đã thử chỉ với \ n, không tạo ra bất kỳ sự khác biệt nào. – maff

Trả lời

25

Hãy thử (không kiểm tra bản thân mình):

comment = comment.Replace(System.Environment.NewLine, "<br />"); 

CẬP NHẬT:

Chỉ cần kiểm tra mã - nó hoạt động trên máy tính của tôi

CẬP NHẬT:

Một giải pháp khác:

System.Text.StringBuilder sb = new System.Text.StringBuilder(); 
System.IO.StringReader sr = new System.IO.StringReader(originalString); 
string tmpS = null; 
do { 
    tmpS = sr.ReadLine(); 
    if (tmpS != null) { 
     sb.Append(tmpS); 
     sb.Append("<br />"); 
    } 
} while (tmpS != null); 
var convertedString = sb.ToString(); 
+0

Hoàn hảo, cảm ơn :) – maff

+4

Nó hoạt động trên máy của bạn? http://www.codinghorror.com/blog/archives/000818.html –

+0

System.Environment.NewLine đề cập đến môi trường của máy chủ, phải không? Điều này có hiệu quả nếu trình duyệt của khách hàng là một môi trường khác? – CoderDennis

3

để xem các thẻ html như một DisplayFor

bạn cần phải sử dụng một phương pháp khác, trên thực tế các MVC dosent cho phép bạn xem thẻ trong trang

nhưng bạn có thể sử dụng điều này để bỏ qua tùy chọn này

@Html.Raw(model => model.text) 

may mắn

0

@ Html.Raw (@ Model.Comment.RestoreFormatting())

.210

và hơn ...

public static class StringHelper 
{ 
    public static string RestoreFormatting(this string str) 
    { 
     return str.Replace("\n", "<br />").Replace("\r\n", "<br />"); 
    } 
} 
Các vấn đề liên quan