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 ответ:
Прежде всего, важно понять, когда вы должны использовать
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
.