Как привязать объект JsonResult к jqgrid?

У меня есть следующий метод в контроллере, который я вызываю из своего представления для заполнения jqgrid. Этот метод отлично работает и возвращает данные.

public JsonResult _FirstLook()
{
    HttpResponseMessage response;

    response = client.GetAsync("api/CasoAdverso").Result;
    if (response.IsSuccessStatusCode)
        {
            IEnumerable<CasoAdverso> list = response.Content.ReadAsAsync<IEnumerable<CasoAdverso>>().Result;

            return Json(list);
        }
}

Если я отлаживаю то, что возвращается, структура будет такой, как на картинке ниже. Список объектов находится в Data:

введите здесь описание изображения

Я подытожу класс CasoAdverso, потому что он довольно большой, чтобы поместить его здесь:

public class CasoAdverso
{
    public int CAAD_Id { get; set; }
    public string CAAD_Id_Local { get; set; }
    public System.DateTime? CAAD_Fecha_Contacto { get; set; }
}

jqgrid фактически получает данные для заполнения, но почему-то не отображается:

$(grid_selector).jqGrid({
datatype: "json",
height: 250,
mType: 'GET',
url: "@Url.Action("_FirstLook", "CasoAdversoForm")", 
colNames: ['ID', 'ID Caso', 'Fecha Contacto Notif.'],
        colModel: [
            {   name: 'CAAD_Id', index: 'CAAD_Id', key: true },
            {   name: 'CAAD_ID_Local', index: 'CAAD_ID_Local', width: 60, editable: false },
            {  name: 'CAAD_Fecha_Contacto', index: 'CAAD_Fecha_Contacto', width: 90, editable: false, sorttype: "date", unformat: pickDate },
        ],
  ...
        },

Я знаю, что решение может прийти через jsonReader в jqgrid, но я не мог добиться какого-либо прогресса, не полностью изменив мой метод _FirstLook в контроллере.

В моем сценарии мне нужно было бы изменить jqgrid, чтобы связать то, что я сейчас получаю от контроллера. Было бы хорошо, если бы не пришлось делать какой-то обходной путь в контроллере, чтобы дать jqgrid то, что ему нужно по умолчанию.


person Javier    schedule 29.11.2013    source источник
comment
Пожалуйста, определите привязку: каково ожидаемое поведение? Чем оно отличается от реального поведения?   -  person Saturnix    schedule 29.11.2013
comment
В этом случае привязка будет устанавливать jsonReader, который свяжет структуру, ожидаемую сеткой, со структурой объекта JsonResult. Ожидаемое поведение будет заполняться и отображаться, но этого не происходит...   -  person Javier    schedule 29.11.2013
comment


Ответы (1)


Я предполагаю, что основная причина описанной проблемы не "привязка". Вы используете опцию mType: 'GET', которая будет проигнорирована, потому что опция с именем mType не существует. Таким образом, будет использоваться значение параметра по умолчанию mtype: 'GET' (mtype вместо mtype). Поэтому вы должны либо использовать mtype: 'POST', либо заменить строку

return Json(list);

to

return Json(list, JsonRequestBehavior.AllowGet);

Кроме того, я бы порекомендовал вам убедиться, что вы используете опцию loadonce: true, потому что вы не реализовали подкачку на стороне сервера в своем коде сервера. Я рекомендую вам дополнительно использовать опции gridview: true, autoencode: true и рассмотреть возможность использования height: "auto" вместо height: 250.

person Oleg    schedule 29.11.2013