【问题标题】:How to print a ViewBag string that was populated within a try/catch block如何打印在 try/catch 块中填充的 ViewBag 字符串
【发布时间】:2017-11-15 19:42:05
【问题描述】:

我正在我的控制器中解析一个 JSON 文件并具有 try/catch 功能。 JSON 的捕获填充 ViewBag,如​​果出现错误,我想在视图中打印它。但是 ViewBag.Error 不会打印到屏幕上。我闯入视野,绳子就在那里。它只是不打印。

这是来自控制器的相关代码:

catch (JsonReaderException jex)
{
            ViewBag.Error = "JSON Parsing Error: " + jex.Message;
            return View();
 }

这是我的看法:

@if ((string)ViewBag.Error != "")
{
   @Html.Label((string)ViewBag.Error)<br>
}

【问题讨论】:

  • 你误解了@Html.Label。直接打印就行了。
  • @SLaks 他可能会用它来设计样式,尽管我对此表示怀疑。动态类型的强制转换不是必需的。仍然不应该阻止文本打印。
  • 你能不能用@Html.Raw代替label试试看。像这样@Html.Raw((string)ViewBag.Error)
  • @ISHIDA:这是一个 XSS 漏洞。 不要那样做
  • @SLaks 我同意,但他没有输入任何数据,他只是显示它(这是他问题中的标签)。

标签: c# json asp.net-mvc


【解决方案1】:

问题在于您的异常消息中的句点(.)字符。查看json异常消息,您通常会在其中找到一个点(.)。

如果你有一个观点,HTML 标签元素会感到困惑。在第一个参数中,因为它需要一个属性表达式。

请改用Label(string expression, string labelText)
例如:@Html.Label("",ViewBag.Error)

正如@sLaks 所指出的,..HTML.Raw 不是用于此目的的合适元素。

【讨论】:

    【解决方案2】:

    您应该直接打印该值:

    @ViewBag.Error
    

    不要调用Html.Raw(),因为你的值不是 HTML。

    【讨论】:

      【解决方案3】:

      ViewData 和 TempData 需要类型转换和 null 检查,而 ViewBag 不需要此类检查。

      如果您有兴趣了解更多信息,请点击此处:http://www.binaryintellect.net/articles/36941654-8bd4-4535-9226-ddf47841892f.aspx

      所以在你看来,你可以简单地写如下:

         @ViewBag.Error
      

      无论您想在哪里显示错误消息。

      希望对你有帮助

      谢谢

      卡提克

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-07-07
        • 2012-11-22
        • 2016-07-24
        • 1970-01-01
        • 1970-01-01
        • 2020-06-17
        相关资源
        最近更新 更多