Как исправить jsonresult, который не заполнялся в представлении, но имел данные в контроллере - PullRequest
1 голос
/ 25 марта 2019

Я новичок в кодировании с использованием javascrip, json и mvc. У меня есть вопрос, надеюсь, вы можете мне помочь. У меня есть коды, когда я использую для отладки в контроллере, у него есть данные, но когда он возвращается к просмотру с использованием результата json, он не будет взаимодействовать с таблицей.

Контроллер / C # код:

  [HttpPost]
    public ActionResult getAccountability()
    {
        var data = db.cct_custodials.Where(w => w.EmployeeNo == UserCurrentRole.UserID).OrderBy(o => o.DateCreated).ToList();
        var serializer = new JavaScriptSerializer { MaxJsonLength = Int32.MaxValue };
        var result = new ContentResult
        {
            Content = serializer.Serialize(data),
            ContentType = "application/json"
        };
        return result;
    }

Просмотр / HTML код:

function attachCustodial() {
    $.ajax({
        beforeSend: function () {
            $.blockUI({ baseZ: 2000 });
        },
        cache: true,
        type: 'POST',
        url: '/Accountability/getAccountability',
        contentType: 'application/json; charset=utf-8',
        dataType: 'json',
        success: function (json) {
            var oTable = $('#dtFinalTransfer').dataTable();
            oTable.fnDestroy();

            oTable.dataTable({
                "bSortClasses": false,
                "bSort": false,
                "bAutoWidth": false,
                "bLengthChange": false,
                "bFilter": false,
                "bPaginate": true,
                "sPaginationType":"full_numbers",
                "iDisplayLength": 2000,
                "aaData": json.result,
                "aoColumns": [
                    {
                        "mData": null,
                        "sClass": "ctr valign",
                        "sWidth": "5%"
                    },
                    {
                        "mData": "ProjectName",
                        "sClass": "ctr valign",
                        "sWidth": "15%"
                    },
                    {
                        "mData": "ReferenceNo",
                        "sClass": "ctr valign",
                        "sWidth": "15%"
                    },
                    {
                        "mData": "CustodialNo",
                        "sClass": "ctr valign",
                        "sWidth": "15%"
                    },
                    {
                        "mData": "IssuedBy",
                        "sClass": "ctr valign",
                        "sWidth": "20%"
                    },
                    {
                        "mData": "Name",
                        "sClass": "ctr valign",
                        "sWidth": "20%"
                    },
                    {
                        "mData": null,
                        "sWidth": "10%",
                        "bSearchable": false,
                        "sClass": "ctr valign",
                        "sDefaultContent": '<a class="pointer" onclick="viewCustodial(this)">&nbsp;View&nbsp;</a>',
                    }
                ]
            });
            tableCounter(oTable);
            $.unblockUI();
        },
        error: function (e) { $.unblockUI(); checkmsg('Please contact your system admininistrator' + e.responseText) }
    });
}

но при использовании этого кода .. Я сталкиваюсь с ошибкой * "Ошибка при сериализации или десериализации с использованием JSON JavaScriptSerializer.

Длина строки превышает значение, установленное в maxJsonLength свойство. "

 [HttpPost]
        public JsonResult getAccountability()
        {

            //var data = db.cct_custodials.Where(w => w.EmployeeNo == UserCurrentRole.UserID && w.ReferenceNo == "JAZZ-2017-B0009").OrderBy(o => o.DateCreated).ToList(); for sample
            var data = db.cct_custodials.Where(w => w.EmployeeNo == UserCurrentRole.UserID).OrderBy(o => o.DateCreated).ToList();
              return Json(new { result = data }, JsonRequestBehavior.AllowGet);
       }

ожидаем, что вывод заполнит таблицу сотнями тысяч или миллионами записей.

1 Ответ

0 голосов
/ 25 марта 2019

Здесь проблема в том, что ваша длина строки json превышает значение по умолчанию, поскольку при передаче

ожидаемый вывод будет заполнять таблицу сотнями тысяч или миллионами записей.

Вы можете установить свойство MaxJsonLength в файле web.config:

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

установить maxJsonLength и по умолчанию maxJsonLength равно 102400 , поэтому установите это значение.

Предложение: Если возможно, тогда используйте нумерацию на стороне сервера, поскольку получение миллионов записей с сервера невозможно.получите только 10-20 записей одновременно и получите другие записи на следующей странице.

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