我正在使用ASP.MVC 3.我有一个视图,上面有一个textarea。我在其中捕获数据,当我想要一个新段落时,我会按两次输入。输入完所有数据后,我将文本保存到数据库中。
在我的详细信息视图中,我将以类似的方式显示数据:
<tr>
<td valign="top"><label>Body:</label></td>
<td>@Model.Body</td>
</tr>
现在文本显示为1段,即使在我的textarea中(当我捕获数据时)它似乎很喜欢段落。
我如何将数据显示为表格中的段落,就像我在textarea中捕获的那样。我假设我必须搜索回车并用断点标签替换它们?
答案 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<><br/>line4";
Assert.AreEqual(expected, actual.ToHtmlString());
}