2011-02-17 76 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