【问题标题】:MVC3 putting a newline in ViewBag textMVC3 在 ViewBag 文本中添加换行符
【发布时间】:2012-03-01 04:33:00
【问题描述】:

我有一个 MVC3 C#.Net 网络应用程序。我正在循环一个数据表。有些行导入正常,有些行不正常。我想以列表格式将错误列表发送回视图。我将以下文本分配给 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.

有什么想法吗?

【问题讨论】:

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


    【解决方案1】:

    当你投入到你的视野中时,使用

    @Html.Raw(ViewBag.Test)
    

    而不是

    @ViewBag.Test
    

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

    【讨论】:

    • @post....这行得通,但再次决定将标记语言保留在视图中,而不是控制器中。谢谢
    【解决方案2】:

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

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

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

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

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

    关注点分离

    您不应该在控制器中处理标记布局(即换行符或任何其他 DOM 元素)。 演示应该由视图单独处理。这就是为什么最好传递string[]

    【讨论】:

    • @Shark....我根据你提到的“关注点分离”选择了这个答案
    • @MikeTWebb 当然,我坚信我们 MVC 开发人员应该严格遵守这一点。它允许易于维护的代码。
    【解决方案3】:

    这对我有用:

    控制器:

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

    查看:

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

    【讨论】:

    • 您能否在答案中添加一些解释?
    【解决方案4】:

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

    控制器代码:

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

    剃刀形态代码:

    @Html.Raw(@MsgFormatted)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-09-09
      • 2011-02-23
      • 2011-03-09
      • 2018-09-19
      • 2018-04-19
      • 1970-01-01
      相关资源
      最近更新 更多