Использование JQGrid DataUrl с ASP.net (MVC 2.0) - PullRequest
0 голосов
/ 09 декабря 2010

Я хочу отобразить комбинированный список с диалогом добавления / редактирования на Jqgrid.Я мог бы сделать это с жестко закодированными значениями.Но теперь я хочу заполнить данные из базы данных (действие контроллера).Может кто-нибудь помочь мне написать код контроллера для DataUrl.(Нужна ли строка формата & текст в формате Json?).Мое определение Grid приведено ниже.

Мои другие действия с URL работают нормально.

        jQuery("#myGrid").jqGrid({
            pager: jQuery('#myGridPager'),
            sortname: 'Name',
            rowNum: 10,
            rowList: [10, 20, 50],
            sortorder: "asc",
            height: "auto",
            autowidth: true,
            colNames: ['Id', 'Name', 'Dept', 'Status', 'ParentNodeName'],
            colModel: [
              { name: 'Id', index: 'Id', hidden: true, key : true },
              { name: 'Name', index: 'Name', width: 200, editable: true, edittype: "text", editrules: { required: true} },
              { name: 'Dept', index: 'Dept', width: 90, editable: true, editrules: { required: true} },
              { name: 'Status', index: 'Status', width: 25, editable: true, edittype: "select", editoptions: { value: "A:Active;I:Inactive"} },
              { name: 'ParentNodeName',
                        index: 'ParentNodeName',
                        editable: true,
                        edittype: "select",
                        editoptions: { dataUrl: "/MyEntity/GetMyEntitys" }
                    },
              ], 
            datatype: 'json',
            viewrecords: true,
            mtype: 'GET',
            jsonReader: {
                root: "rows",
                page: "page",
                total: "total",
                records: "records",
                repeatitems: false,
                userdata: "userdata"
            },
            url: "/MyEntity/GetMyEntitysData",
            multiselect: false,
            editurl: "/MyEntity/EditMyEntity?__SESSIONKEY=<%=Model.SessionKey %>",
            caption: "Data Entry"
        })
        .navGrid('#myGridPager', { view: true, del: true, add: true, edit: true },
        { height: 150, reloadAfterSubmit: false, modal: true }, // default settings for edit
        { height: 150, reloadAfterSubmit: true, modal: true, url: "/MyEntity/AddMyEntity?__SESSIONKEY=<%=Model.SessionKey %>" }, //  settings for add
        { height: "auto", reloadAfterSubmit: false, modal: true, url: "/MyEntity/DeleteMyEntity?__SESSIONKEY=<%=Model.SessionKey %>" }, // delete 
        { closeOnEscape: true, multipleSearch: true, closeAfterSearch: true }, // search options
        {} /* view parameters*/
      );

Ответы [ 2 ]

1 голос
/ 31 декабря 2010

Вызовите код контроллера в dataUrl, используя параметры редактирования, как показано ниже:

.aspx/js code:

Опции редактирования: { dataUrl: "/YourControllerName/TheFunction" }

Код контроллера здесь:

public string TheFunction()
        {
            return ConstructSelect(Model.YourList);
        }

        public string ConstructSelect(SelectList collection)
        {
            string result = "<select>";

            foreach (var item in collection)
            {
                result = result + "<option value = '" + item.Value + "'>" + item.Text + "</option>";
            }

            result = result + "</select>";
            return result;
        }
0 голосов
/ 09 декабря 2010

jqGrid ожидает фрагмента кода HTML (допустимый элемент HTML <select> с требуемым <options>: <select><option value='1'>One</option>…</select>) в качестве данных, возвращаемых из dataUrl: "/MyEntity/GetMyEntitys".Поскольку вы возвращаете данные в формате JSON, вам необходимо преобразовать данные, возвращенные с сервера, в editoptions buildSelect .Соответствующий пример кода вы можете увидеть в моем старом ответе .

Еще одно небольшое замечание.Посмотрите документацию jqGrid и убедитесь, какие параметры, которые вы используете, являются настройками по умолчанию.Например, multiselect: false является параметром по умолчанию.Если вы удалите параметры по умолчанию из определения сетки, код будет легче читать, и он будет работать немного быстрее.В более сложные параметры, такие как jsonReader, вы можете включить только те свойства, которые вы хотите изменить .Например, вы можете использовать jsonReader в форме jsonReader : { repeatitems: true}, потому что repeatitems является единственным свойством jsonReader, которое вы хотите изменить по умолчанию.Таким же образом вы можете уменьшить { view: true, del: true, add: true, edit: true } до { view: true }.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...