Estoy trabajando en un proyecto en el que tengo que pasar una gran lista de datos (500 000 registros o más) a través de ViewBag. Desde mi controlador, envío los datos que se muestran a continuación.
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(); }Y desde mi punto de vista, estoy usando el siguiente código para analizar esos datos en JavaScript. Al probar este código, obtener maxJsonLength supera el error.
<script> $(document).ready(function(){ @Html.Raw(Json.Encode(@ViewBag.JsonData)); }); </script>También probé esto y funciona con registros de 500k mientras que los datos no contienen caracteres especiales. Si los datos contienen algún carácter especial, entonces no está funcionando.
<script> $(document).ready(function(){ JSON.parse('@ViewBag.JsonData'); }); </script>Nota: No recibo un error en el archivo .cs (código c#) porque esta solución ya está implementada en mi proyecto.
Está recibiendo el error de problemas de desbordamiento de MaxJsonLength. Este no es un problema de JavaScript, sino problemas en C#. No admite una gran cantidad de conjuntos de datos en Json.Encode .
Es posible abordar esta situación solo de esta manera con un JavascriptSerializer y configurando la propiedad MaxJsonLength manualmente o solo utilizada por Newtonsoft.Json
Códigos 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(); } }Páginas de afeitar
<script> $(document).ready(function () { function mockDataForDataAsList() { return @Html.Raw(ViewBag.DataAsList); } console.log(mockDataForDataAsList()); }); </script>En este escenario, puede manejar 2 millones de registros en unos pocos segundos. ¡Espero que hayas obtenido tus respuestas!
Está recibiendo el error en "código C#". Esto no es un problema de JavaScript.
Si editar web.config no ayuda, puede intentar usar una instancia de un JavascriptSerializer y configurar la propiedad MaxJsonLength manualmente:
@{ var serializer = new JavaScriptSerializer() { MaxJsonLength = Int32.MaxValue }; var jsonData = serializer.Serialize(@ViewBag.JsonData); }