ASP.NET MVC3 ViewBag清理字符串

ASP .NET MVC3 ViewBag sanitizing string

本文关键字:字符串 ViewBag NET MVC3 ASP      更新时间:2023-09-26

因此,我需要将视图中基于数据库数据的字符串数组传递给JavaScript函数。所以我在控制器中有这样的代码:

        string top_six_string = "[";
        foreach (ObjectModel om in collection)
        {
            myProject.Models.BlobFile file = null;
            if (om.BlobFile != null)
            {
                file = om.BlobFile;
            }
            else if (om.BlobFiles.Count != 0) 
            {
                file = om.BlobFiles.First();
            }
            if (file != null)
            {
                top_six_string += " '"" + file.BlobFileID + "'",";
            }
        }
        top_six_string = top_six_string.TrimEnd(',');
        top_six_string += "]";
        ViewBag.TopSixList = top_six_string;

现在,我不太明白为什么我们同时有Blob文件字段和Blob文件集合,但这不是重点。重点是,调试表明我准确地得到了我想要的字符串(形式为["25","21","61","59"](。

但在运行JavaScript时,我收到了一个令人困惑的错误"Unexpected character&",在Chrome中查看了一点源代码后,我了解到字符串是这样的:

[ "25", "21", "61", "59"]

因此,我的假设是ViewBag正在清除它在HTML中传递给显示的字符串,但显然这不是我现在关心的问题。我的假设正确吗?是否有其他方法将此信息传递给视图?有没有一种方法可以在之后将字符串强制返回到引号中?

当您在视图中输出ViewBag的内容时,问题最有可能出现。默认情况下,Html助手会对输出进行消毒,以帮助防止注入攻击。

当在视图中输出值时,您想要的是:@Html.Raw(ViewBag.TopSixList(

由于程序员几乎不使用MVC3,谷歌也为Asp-core 显示了此页面

在ASP.Net Core中更改此行:

ViewBag.TopSixList = top_six_string;

ViewBag.TopSixList = new HtmlString(top_six_string);

并使用Microsoft.AspNetCore.Html添加如果HtmlString不可访问。