Как использовать пользовательскую кнопку для отправки в editurl JQGrid? - PullRequest
0 голосов
/ 10 мая 2018

У меня есть нижеуказанная пользовательская кнопка, добавленная к моему навигационному пейджеру, но я хочу, чтобы она посмотрела на то, что я выбрала, и отправила ее в editurl JQGrid для обработки, которая является страницей ASHX.CS. Но я не могу понять документацию, когда дело доходит до пользовательской кнопки

Я могу заставить его вызывать локальную функцию с помощью onClickButton: customButtonClicked, но он не отправляет данные, как это делает кнопка EDIT

В конце, что я хочу сделать, выберите несколько строк и нажмите кнопку на панели навигации и утвердите все выбранные записи

        // add first custom button
        $('#jQGrid').navButtonAdd('#jQGridPager',
            {
            buttonicon: "ui-icon-mail-closed",
            title: "Send Mail",
            caption: "Send Mail",
            position: "last",
            editData: {
                WrkId: function () {
                    var sel_id = $('#jQGrid').jqGrid('getGridParam', 'selarrrow');
                    var value = "";
                    for (var a = 0; a < sel_id.length; a++) {
                        value = value + $('#jQGrid').jqGrid('getCell', sel_id[a], 'wrkid') + ',';
                    }
                    return value;
                },
                CurrentUser: function () {
                    return '<% =System.Web.HttpContext.Current.User.Identity.Name %>';
                }
            },
            afterSubmit: function (response, postdata) {
                if (response.responseText == "") {
                    $("#jQGrid").trigger("reloadGrid", [{ current: true }]);
                    return [false, response.responseText]
                }
                else {
                    $(this).jqGrid('setGridParam', { datatype: 'json' }).trigger('reloadGrid')
                    return [true, response.responseText]
                }
            }
            }
        );

1 Ответ

0 голосов
/ 10 мая 2018

используя несколько разных слов (как вручную отправлять данные на сервер json), я смог найти фрагмент кода ajax, который имел больше смысла (я уверен, что сталкивался с этим раньше, но как человек, у которого нет jquery опыт я не узнал)

но нижеприведенное отправляет на страницу обработчика C # данные в виде строки JSON, которая была обрабатываемой, должна была использовать динамический для чтения, но это работало, не могло заставить ее не возвращать ошибку, даже при отсутствии ошибки , поэтому я использовал полный: вместо успеха: и затем вызвал триггер для перезагрузки JQGrid

Итоговый код:

$('#jQGrid').navButtonAdd('#jQGridPager',
            {
                buttonicon: "ui-icon-check",
                title: "Approve all selected entries",
                caption: "Approve",
                position: "last",
                onClickButton: function () {
                    var sel_id = $('#jQGrid').jqGrid('getGridParam', 'selarrrow');
                    var value = "";
                    for (var a = 0; a < sel_id.length; a++) {
                        value = value + $('#jQGrid').jqGrid('getCell', sel_id[a], 'wrkid') + ',';
                    };
                    $.ajax({
                        type: "POST",
                        url: "AdministrationHandler.ashx?oper=approve",
                        data: JSON.stringify({
                            WrkId: value,
                            CurrentUser: "<% =System.Web.HttpContext.Current.User.Identity.Name %>"
                        }),
                        dataType: "json",
                        contentType: "application/json; charsset=utf-8",
                        complete: function (xhr, x) {
                            if (xhr.responseText.toUpperCase().indexOf("SUCCESS") >= 0) {
                                alert('Success!\n' + xhr.responseText);
                            }
                            else {
                                alert('Failed!\n' + xhr.responseText + '\n' + x);
                            };
                            $("#jQGrid").jqGrid('setGridParam', { datatype: 'json' }).trigger('reloadGrid');
                        }
                    })
                }
            });

C # код

try
{
    String postData = new System.IO.StreamReader(context.Request.InputStream).ReadToEnd();
    var data = JsonConvert.DeserializeObject<dynamic>(postData);
    Approve(data.WrkId.ToString(), data.CurrentUser.ToString());
    strResponse = "Employee records successfully approved";
}
catch
{
    strResponse = "Employee records not approved";
}
context.Response.Write(strResponse);
...