MVC3在ViewBag文本中添加换行符

时间:2012-02-08 17:30:36

标签: c# asp.net-mvc-3 text line-breaks viewbag

我有一个MVC3 C#.Net网络应用程序。我正在循环使用DataTable。有些行导入OK,有些则不是。我想以列表格式将错误列表发送回视图。我将以下文本分配给ViewBag属性

Input error on Row(1) Cell(3) Input string was not in a correct format.<br/> Input error on Row(4) Cell(3) Input string was not in a correct format.<br/>

我希望br会在HTML中写一个换行符。它不是。我希望错误消息看起来像这样

Input error on Row(1) Cell(3) Input string was not in a correct format.
Input error on Row(4) Cell(3) Input string was not in a correct format.

有什么想法吗?

4 个答案:

答案 0 :(得分:14)

当您进入视图时,请使用

@Html.Raw(ViewBag.Test)

而不是

@ViewBag.Test

这将向编译器表明字符串是html,并且不需要像这样编码。

答案 1 :(得分:8)

使用string[]来保存您的错误。这样,它们就是一个结构良好且不同的错误集,而不仅仅是一个长字符串。

在您的Controller中,初始化ViewBag属性:

ViewBag.Errors = new string[] { "First error", "Second error" };

在您的视图中,显示以下错误:

@foreach (string error in ViewBag.Errors)
{
    @Html.Label(error)
    <br />
}

关注点分离

您不应该在Controller 中处理标记布局(即换行符或任何其他DOM元素)。 演示文稿应仅由View 处理。这就是为什么最好传递string[]

答案 2 :(得分:0)

这对我有用:

控制器:

 ViewBag.Msg += Environment.NewLine + "xxxx";

查看:

<p class="@ViewBag.MsgColor">
        @Html.Raw(@ViewBag.Msg.Replace(Environment.NewLine, "<br/>"))
 </p>

答案 3 :(得分:0)

我的首选方法是简单地将 <br /> 添加到控制器代码中的行时间作为 ViewData["msg"] 然后可以从剃刀页面中提取,如下所示。

控制器代码:

ViewData["msg"] = "Your Query <br /> has been processed.";

剃刀表格代码:

@Html.Raw(@MsgFormatted)