C# 如何打印在try/catch块中填充的ViewBag字符串

C# 如何打印在try/catch块中填充的ViewBag字符串,c#,json,asp.net-mvc,C#,Json,Asp.net Mvc,我正在解析控制器中的JSON文件,并具有try/catch功能。JSON的捕获将填充ViewBag,如果出现错误,我希望在视图中打印它。但是,ViewBag.Error不会打印到屏幕上。我破门而入,发现绳子就在那里。它就是印不出来 这是来自控制器的相关代码: catch (JsonReaderException jex) { ViewBag.Error = "JSON Parsing Error: " + jex.Message; return V

我正在解析控制器中的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>
}
@if((字符串)ViewBag.Error!=“”)
{
@Html.Label((字符串)ViewBag.Error)
}
您应该直接打印值:

@ViewBag.Error

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

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

如果你有一个观点,HTML标签元素就会变得混乱。在第一个参数中,因为它需要一个属性表达式

使用
标签(字符串表达式、字符串标签文本)

例如:
@Html.Label(“,ViewBag.Error)


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

ViewData和TempData需要类型转换和空检查,而ViewBag不需要这样的检查。

如果您有兴趣了解更多信息,请参阅:

因此在您看来,您可以简单地写如下:

   @ViewBag.Error
无论您想在何处显示错误消息

希望能有所帮助

谢谢


Karthik

您误解了
@Html.Label
。直接打印就行了。@SLaks他可能在用它做造型,尽管我对此表示怀疑。动态类型的强制转换不是必需的。仍然不应该停止打印文本。您是否可以使用
@Html.Raw
而不是标签,然后再试一次。像这样的东西
@Html.Raw((string)ViewBag.Error)
@ISHIDA:那是一个XSS洞。不要这样做。@SLaks我同意,但他没有输入任何数据,他只是在显示数据(这是他问题中的一个标签)。