asp.net jqGrid выпадающий мультиселект - PullRequest
1 голос
/ 03 апреля 2012

Я пытаюсь использовать плагин множественного выбора jQuery в форме редактирования jqGrid (добавить форму).

Это код (colModel выдержка), который я использую для построения выпадающего списка:

{ 
    name: 'CaratteristicheCamera',
    index: 'CaratteristicheCamera', 
    width: 50, 
    hidden: true, 
    edittype: 'select',
    editable: true, 
    editrules: { edithidden: true, required: true }, 
    editoptions: {
        multiselect: true,
        dataUrl: '<%# ResolveUrl("~/Service/Domain/ServiceRoom.asmx/GetRoomFeatureList") %>',
        buildSelect: function (data) {
            var retValue = $.parseJSON(data);
            var response = $.parseJSON(retValue.d);

            var s = '<select id="CaratteristicheCamera" name="CaratteristicheCamera">';

            if (response && response.length) {
                for (var i = 0, l = response.length; i < l; i++) {
                    s += '<option value="' + response[i]["Id"] + '">' +
                        response[i]["Descrizione"] + '</option>';
                }
            }

            return s + "</select>";
        },
        dataInit: function() {
            $("#CaratteristicheCamera").multiselect();
        }
    }

},

Как вы, ребята, видите, jqGrid вызывает webmethod в файле asmx. Кажется, все работает нормально, но я не могу получить все значения, выбранные пользователем из выпадающего списка. Похоже, система отправляет на сервер последний выбор. У вас есть какие-нибудь советы по этому поводу?

РЕДАКТИРОВАТЬ : это декларация asmx webservice

[WebMethod]
public string SaveRoom(string id, string codice, string Numero, string NumeroPiano,
                       string Nome, string TipoCamera, string StatoCamera,
                       string CaratteristicheCamera, string TipoSdoppiabilita)
{}

1 Ответ

1 голос
/ 03 апреля 2012

Я пытался Эрик Хиндс jQuery UI MultiSelect Widget вместе с jqGrid 3.4.1 и не смог увидеть ни одной проблемы, которую вы описали.Я рекомендую вам сравнить вашу демо с моей, чтобы найти различия.

Одна плохая вещь, которую я вижу в вашем коде, это то, что вы устанавливаете атрибут id="CaratteristicheCamera" для <select>, который вы генерируете в buildSelect.Вы должны просто использовать <select> без каких-либо дополнительных атрибутов.JqGrid будет устанавливать все атрибуты, такие как id или multiple="multiple".

В демоверсии Я использовал editurl: 'test.asmx/dummy', которых нет на сервере.Таким образом, вы видите сообщение об ошибке вроде

enter image description here

после выбора и отправки выбранных элементов

enter image description here

Тем не менее, можно видеть с уважениемтаких инструментов, как Fiddler , Firebug или инструментов разработчика IE или Chrome (см. HTTP-трафик на вкладке «Сеть»), которые демо-версия публикует как

{"name":"test8","closed":"No","ship_via":"FE,TN","oper":"edit","id":"8"}

до http://www.ok-soft-gmbh.com/jqGrid/test.asmx/dummy.Таким образом, значения "FE,TN" выбранных элементов FedEx, TNT будут отправлены, как ожидается.В вашем случае CaratteristicheCamera параметр SaveRoom должен быть инициализирован в список выбранных значений через запятую.Я надеюсь, что вы найдете проблему в своем коде, если вы сравните мое демо с молодежью.

Другая небольшая проблема в выложенном вами коде заключается в том, что вы выполняете сериализацию в JSON вручную в WebMethod GetRoomFeatureList ивозвращает string.Таким образом, строка будет сериализована в JSON дважды .Так что вы используете

var retValue = $.parseJSON(data);
var response = $.parseJSON(retValue.d);

Правильно будет вернуть что-то вроде List<Room>.ASP.NET будет сериализовать его автоматически.Если вы используете опцию jqGrid

ajaxSelectOptions: {
    contentType: 'application/json; charset=utf-8',
    dataType: "json"
}

, то data in buildSelect вообще не понадобится для анализа.Вы можете напрямую использовать data.d[i].Id и data.d[i].Descrizione в цикле.Я написал вам об этой же проблеме в другом ответе на ваш старый вопрос.

...