2011-02-17 77 views
1

我正在使用ASP.MVC 3.我有一個視圖,它上面有一個textarea。我在其中捕獲數據,當我想要一個新的段落時,我將按兩次輸入。在輸入所有數據後,我將文本保存到數據庫。如何在表格中顯示textarea的數據

在我的個人資料查看我會以同樣的顯示數據:

<tr> 
    <td valign="top"><label>Body:</label></td> 
    <td>@Model.Body</td> 
</tr> 

現在的文字顯示爲1款,即使在我的textarea(當我捕捉到的數據),它似乎很喜歡的段落。

我怎麼會得到的數據顯示爲我的表格中的段落,就像我在textarea中捕獲到的那樣。我假設我必須搜索回車並將其替換爲中斷標記?

回答

5

我假設我必須搜索回車並將其替換爲中斷標記?

是的,你的假設是正確的。你可以使用自定義的HTML幫助:

public static IHtmlString FormatBody(this HtmlHelper htmlHelper, string value) 
{ 
    if (string.IsNullOrEmpty(value)) 
    { 
     return MvcHtmlString.Empty; 
    } 
    var lines = value.Split('\n'); // Might need to adapt 
    return htmlHelper.Raw(
     string.Join("<br/>", lines.Select(line => htmlHelper.Encode(line))) 
    ); 
} 

然後:

@Html.FormatBody(Model.Body) 

UPDATE:

而這裏的單元測試的了這個方法是一個例子:

[TestMethod] 
public void FormatBody_should_split_lines_with_br_and_html_encode_them() 
{ 
    // arrange 
    var viewContext = new ViewContext(); 
    var helper = new HtmlHelper(viewContext, MockRepository.GenerateStub<IViewDataContainer>()); 
    var body = "line1\nline2\nline3<>\nline4"; 

    // act 
    var actual = helper.FormatBody(body); 

    // assert 
    var expected = "line1<br/>line2<br/>line3&lt;&gt;<br/>line4"; 
    Assert.AreEqual(expected, actual.ToHtmlString()); 
} 
+0

@Darin:謝謝。 – 2011-02-17 10:56:48

相關問題