ASP .NET MVC3 ViewBag清理字符串

时间:2011-07-06 15:08:10

标签: c# javascript html asp.net-mvc

所以我需要根据数据库中的数据在我的视图中将一个字符串数组传递给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;

现在,我并不特别理解为什么我们同时拥有BlobFile字段和BlobFiles集合,但那并不是那么重要。关键是,调试显示我准确地获取了我想要的字符串(格式为[“25”,“21”,“61”,“59”])。

但是在运行JavaScript时,我收到了令人困惑的错误“Unexpected character&”,并且Chrome中的一些源代码查看让我了解到字符串看起来像这样:

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

所以我的假设是ViewBag正在清理它在HTML中传递给 display 的字符串,但显然这不是我现在关注的问题。我的假设是否正确?有没有其他方法来传递视图这个信息?有没有办法可以在之后将字符串强制回到引号?

2 个答案:

答案 0 :(得分:8)

当您在View中输出ViewBag的内容时,最有可能出现此问题。默认情况下,Html帮助程序清理输出以帮助防止注入攻击。

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

答案 1 :(得分:0)

由于程序员几乎不使用MVC3,因此google也会针对Asp核心显示此页面

在ASP.Net Core中更改此行:

ViewBag.TopSixList = top_six_string;

收件人

ViewBag.TopSixList = new HtmlString(top_six_string);

并使用Microsoft.AspNetCore.Html添加(如果无法访问 HtmlString )。