2016-12-27 7 views
2

Я хочу загрузить данные своего сервера в DropDown моего jqgrid. Мой код,jqgrid colmodel editoptions для загрузки json result

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

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 DropDown загружен пустой ячейкой. Я что-то упускаю? Это правильный способ? Пожалуйста, предложите альтернативный способ загрузки выпадающего списка jqgrid с данными сервера со значением по умолчанию для этой строки. Благодарю.

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

ответ

2

Прежде всего, важно понять, когда следует использовать 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. См. the answer для получения более подробной информации и примера кода.

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

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

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

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

+0

Как всегда, вы так полезны. Спасибо за ваш отзыв. Я попробовал, как вы и предложили, но все же я получаю пустые ячейки для выпадающего списка встроенных jqgrid. Пожалуйста, найдите ОБНОВЛЕНО код и любезно предложите мне. Благодарю. – Kavitha

+1

@ Kavitha: Извините, но вы неправильно поняли мои предложения. Вы должны ** не ** делать какой-либо дополнительный вызов Ajax внутри 'beforeProcessing'. Основной ответ на «url» (используемый для заполнения основных данных сетки) должен содержать информацию, которая предоставляет в настоящее время «GetUnit». Пожалуйста, перечитайте внимательно [ответ] (http://stackoverflow.com/a/19427444/315935), на который я ссылался в своем текущем ответе на ваш вопрос. Посмотрите на часть 'colModelOptions' в ответе JSON и на соответствующий код C#. – Oleg

+0

Вы Удивительный. Большое спасибо. Его работа прекрасна. Ваши комментарии настолько полезны. – Kavitha