如何在表格中显示textarea数据

时间:2011-02-17 08:27:04

标签: asp.net-mvc asp.net-mvc-2 asp.net-mvc-3

我正在使用ASP.MVC 3.我有一个视图,上面有一个textarea。我在其中捕获数据,当我想要一个新段落时,我会按两次输入。输入完所有数据后,我将文本保存到数据库中。

在我的详细信息视图中,我将以类似的方式显示数据:

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

现在文本显示为1段,即使在我的textarea中(当我捕获数据时)它似乎很喜欢段落。

我如何将数据显示为表格中的段落,就像我在textarea中捕获的那样。我假设我必须搜索回车并用断点标签替换它们?

1 个答案:

答案 0 :(得分: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)

更新:

这是一个如何对这种方法进行单元测试的例子:

[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());
}