Передача большого списка опций от контроллера для просмотра - PullRequest
0 голосов
/ 24 апреля 2019

У меня огромный список предметов (15000), которые нужно заполнить в выпадающем списке предметов в передней части.Следовательно, я сделал AJAX-вызов (инициируемый при выборе Компании) и этот AJAX-вызов сделан для метода действия в Контроллере, и этот метод действия заполняет список элементов службы и возвращает его обратно в вызов AJAX через ответ.Вот где мой вызов AJAX не работает.Если у меня есть около 100 - 500 предметов, вызов ajax работает.Как я могу решить эту проблему?

Код контроллера

[HttpPost]
        public ActionResult GetCompanyInfo(int Name)
        {
            try
            {
                List<SelectList> lists = new List<SelectList>();

                //This yields about 100 - 20000 items depending on the company
                var serviceItem = cache.getServiceItems(Name).ToList();
                serviceItem.Insert(0, null);
                ViewBag.SelectedServiceItem = new SelectList(serviceItem, "ID", "Name", model.SelectedServiceItem);

                //there are some lists here that not shown for the purpose of demonstation 
                lists.Add(ViewBag.SelectedServiceItem);

                return Json(lists);
            }
            catch (Exception e)
            {
                log.Error(e);
                return null;
            }


        }

Код AJAX:

$("#selectedCompany").change(function () {
            $("#dashSpinner").show();
            var rule = {
                name: $("#selectedCompany").val(),
            }
            debugger;
            $.ajax({
                type: 'POST',
                data: rule,
                url: '@Url.Action("GetCompanyInfo")',
                success: function (lists) {

                    $.each(lists[1], function (i, serviceItem) {
                        $("#SelectedServiceItem").append('<option value="' + serviceItem.Value + '">' +
                         serviceItem.Text + '</option>');
                    });
                    $.each(lists[7], function (i, product) {
                        $("#SelectedProduct").append('<option value="' + product.Value + '">' +
                         product.Text + '</option>');
                    });

                    $("#dashSpinner").hide();


                }
            });

        });

1 Ответ

1 голос
/ 25 апреля 2019

Почему: эта проблема возникает из-за прохода «содержимого-длины» (полезной нагрузки) по сети (HTTP-запрос)

Решение: решить эту проблему можно двумя способами

  1. Настройка длины содержимого на уровне кода

    lists.Add(ViewBag.SelectedServiceItem); var jsonResult = Json(lists, JsonRequestBehavior.AllowGet); jsonResult.MaxJsonLength = int.MaxValue; return jsonResult;

  2. На уровне конфигурации в вашем web.config

    <configuration> <system.web.extensions> <scripting> <webServices> <jsonSerialization maxJsonLength="50000000"/> </webServices> </scripting> </system.web.extensions> </configuration>

Примечание. Я предлагаю настроить его на уровне конфигурации

Спасибо

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...