从 JavaScript 中的 View 转换 ViewBag.JsonData 时,得到 The length of the string exceeds the value set on the maxJsonLength 属性

While converting ViewBag.JsonData from View in JavaScript, getting The length of the string exceeds the value set on the maxJsonLength property

我正在从事一个项目,我必须通过 ViewBag 传递大量数据(500 000 条记录或更多)。从我的控制器,我正在发送如下所示的数据。

public ActionResult Index()
{
  var list = new List<DropdownList>();
    
  for (int i = 0; i < 500000; i++)
  {
     list.Add(new DropdownList() { id = i, text = "Test Data-" + i });
  }
  ViewBag.JsonData = JsonConvert.SerializeObject(list);
  return View();
}

在我看来,我正在使用以下代码来解析 JavaScript 中的数据。在尝试此代码时,获取 maxJsonLength 超出了错误。

<script>
$(document).ready(function(){
   @Html.Raw(Json.Encode(@ViewBag.JsonData));
});
</script>

我也试过了 & 它正在处理 500k 条记录,而数据不包含特殊字符。如果数据包含某些特殊字符,则它不起作用。

<script>
$(document).ready(function(){
   JSON.parse('@ViewBag.JsonData');
});
</script>

注意: 我在 .cs(c# 代码)文件中没有收到错误,因为 this 解决方案已经实施在我的项目中。

收到“C# 代码”中的错误。这不是 JavaScript 问题。

如果编辑 web.config 没有帮助,您可以尝试使用 JavascriptSerializer 的实例并手动设置 MaxJsonLength 属性:

@{
   var serializer = new JavaScriptSerializer() { MaxJsonLength = Int32.MaxValue };
    
   var jsonData = serializer.Serialize(@ViewBag.JsonData);
}

查看更多here and here.

您收到 MaxJsonLength 溢出问题的错误,这不是 JavaScript 问题,而是 C# 上的问题。不支持Json.Encode.

中的大量数据集

只能通过 JavascriptSerializer 并手动设置 MaxJsonLength 属性 或仅由 Newtonsoft.Json[ 使用来解决这种情况=35=]

C# 代码

public class HomeController : Controller
{
    public ActionResult Index()
    {
        var list = new List<DropdownList>();

        for (int i = 0; i < 2000000; i++)
        {
            list.Add(new DropdownList() { id = i, text = "Test Data-" + i });
        }            
        
        //First solutions with JavaScriptSerializer
        var serializer = new System.Web.Script.Serialization.JavaScriptSerializer() { MaxJsonLength = Int32.MaxValue };
        ViewBag.DataAsList = serializer.Serialize(list);

        //Second Solutions with Newtonsoft.Json
        ViewBag.DataAsList = JsonConvert.SerializeObject(list);

        return View();
    }
}

剃刀页面

 <script>
        $(document).ready(function () {
            function mockDataForDataAsList() {
                return @Html.Raw(ViewBag.DataAsList);
            }  
            console.log(mockDataForDataAsList());
        });
  </script>

控制台日志

在这种情况下,您可以在几秒钟内处理 200 万条记录。希望你能得到答案!