jqgrid editoptions colmodel, чтобы загрузить результат в JSON


Я хочу загрузить данные моего сервера в раскрывающемся списке моего jqgrid. Мой код,

ОБНОВЛЕННЫЙ КОД:

 public ActionResult GetUnit()
    {
        List<UnitModel> getUnitValues = new List<UnitModel>();
        //ToDo db code
        Dictionary<int, string> unitValues = new Dictionary<int, string>();
        unitValues = getUnitValues.ToDictionary(x => x.UnitID, x => x.UnitDesc);
        unitValues.Add(4, "Unit2/3");
        unitValues.Add(1, "Unit1");
        unitValues.Add(2, "Unit2");
        unitValues.Add(3, "Unit3");
        return Json(unitValues, JsonRequestBehavior.AllowGet);
    }

Мой jqgrid:

     colModel: [...
      {
            name: 'UnitID', index: 'UnitID', editable: true, edittype: 'select', width: "200",
            formatter: 'select', editoptions: { value: unitslist},
            editrules: { custom: true, custom_func: dupicateRecordValidation
            }
        },
...],

       beforeProcessing: function () {
                    $.ajax({
                    url: '/Home/GetUnit/',
                    dataType: 'json',
                    type: 'POST',
                    contentType: 'application/json; charset=utf-8',
                    success: function (data) {
                        $.map(data, function (value, key) {
                            unitsList += '"' + value + '"' + ':' + '"' + key + '"' + ',';
                        });
                        unitsList += '}';
                        alert(unitsList);
                    }
                });
            },

Но это не работает. В раскрывающемся списке столбец jqgrid загружаться с пустой ячейки. Я что-то упустил? Правильно ли это делать? Пожалуйста, предложите любой альтернативный способ загрузки выпадающего списка jqgrid с данными сервера с выбранным значением по умолчанию этой строки. Спасибо.

Примечание: я использую jQuery jqgrid v4.4.4 Visual Studio

1 2

1 ответ:

Прежде всего, важно понять, когда вы должны использовать formatter: 'select', который вы используете в данный момент. Это необходимо, если вы хотите заполнить сетку информацией об идентификаторах в UnitID, но вам нужно отобразить текст, который соответствует идентификаторам. Например, данные JSON, которые вы получаете с сервера, могут содержать СВОЙСТВО language с содержимым "de", "en", "fr" и так далее, но вы хотите отобразить в столбце "German" вместо "de", "English" вместо "en" и "French" вместо "fr". В этом случае вы должны определить

formatter: 'select', editoptions: { value: 'de:German;en:English;fr:French' },
editable: true, edittype: 'select'

Если Вам действительно нужно использовать formatter: 'select', и вам нужно загрузить editoptions.value через Ajax с сервера, то editoptions.value должны быть установлены до того, как будут обработаны основные данные сетки, возвращенные из url. В этом случае я бы рекомендовал вамрасширить стандартные данные, возвращаемые из url, данными, необходимыми для editoptions.value. Можно использовать beforeProcessing обратный вызов (который поддерживается даже в ретро версии 4.4.4, которая вы используете) и установить editoptions.value динамически относительно метода setColProp. Смотрите ответ для получения более подробной информации и пример кода.

Если вам не нужно использовать formatter: 'select' (если идентификаторы и значения, используемые в select, совпадают), то можно изменить формат данных, возвращаемых из действия GetUnit, на сериализованный массив:

["Unit1", "Unit2", "Unit2/3"]

И использовать dataUrl со свойствами buildSelect editoptions вместо value. Значение dataUrl должно быть URL действия GetUnit, которое возвращает массив строк со всеми utits. Обратный вызов buildSelect должен преобразовать массив JSON в HTML-фрагмент, который представляет <select> со всеми опциями. Смотрите старый ответ, для получения более подробной информации о реализации и примерах кода.

Наконец, вы должны исправить width: "200px" на width: 200. Значением свойства width должно быть число или строка, которая может быть преобразована в число. Использование px или и других суффиксов неверно. Следующим рекомендуемым исправлением будет удаление index: 'UnitID' и всех другие свойства index из colModel, Если значение свойства index совпадает со значением свойства name.