代码之家  ›  专栏  ›  技术社区  ›  Chris

aps.net mvc jqgrid在POST时返回错误

  •  0
  • Chris  · 技术社区  · 6 年前

    我的jqgrid返回“服务器遇到意外情况,无法满足请求”:

    $('#list').jqGrid({
                url: "/DesktopModules/MVC/CW.GridTest/Item/getArtists2",
                datatype: 'json',
                mtype: 'POST',
                headers: {
                    "ModuleId": ModuleId,
                    "TabId": TabId,
                    "RequestVerificationToken": rvtoken
                },
                colNames: ['ArtistID', 'ArtistName', 'City'],
                colModel: [
                    { name: 'ArtistID', index: 'ArtistID', width: 80, align: 'left', editable: false },
                    { name: 'Name', index: 'ArtistName', width: 120, align: 'left', editable: true },
                    { name: 'Location', index: 'City',width: 60,align: 'left',editable: true,
                        edittype: "select",
                        editoptions: { value: "FE:FedEx; IN:InTime; TN:TNT" }
                    }
                ],
                height: '100%',  
                rowNum: 10,    
                emptyrecords: 'No records',  
                //sortname: 'ArtistName',
                //sortorder: 'desc',
                viewrecords: true,
                caption: 'jqGrid First Grid',
                width: 300,
                //gridview: true,
                jsonReader:  
                {  
                    root: "rows",  
                    page: "page",  
                    total: "total",  
                    records: "records",  
                    repeatitems: false,  
                    Id: "0"  
                },  
            });
    

    调试时,jqgrid从不触发我的控制器。我只是知道错误。

    另一方面,在标准的ajax调用中,完全相同的url可以正常工作:

    function update() {
            $.ajaxSetup({ cache: false });
            var rvtoken = $("input[name='__RequestVerificationToken']").val();
            var ModuleId = @Dnn.ModuleContext.ModuleId;
            var TabId = @Dnn.ModuleContext.TabId;
    
            //$("#notice_div").html('Loading..');
            $.ajax({
                url: "/DesktopModules/MVC/CW.GridTest/Item/getArtists2",
                method: "Post",
                headers: {
                    "ModuleId": ModuleId,
                    "TabId": TabId,
                    "RequestVerificationToken": rvtoken
                },
                success: function(data) {
                    $("#dvBands").html(data + "<br/>" + new Date().toISOString());
                    $("#notice_div").html('');
                    window.setTimeout(update, 10000);
                },
                error: function(XMLHttpRequest, textStatus, errorThrown) {
                    $("#notice_div").html('Timeout contacting server..');
                    window.setTimeout(update, 60000);
                }
    
            });
    

    标准ajax工作得很好。我可以看到整个json字符串的格式都是正确的。

    如何更正jqgrid以使其ajax工作,或者更正我的控制器,或者如何设置jqgrid以便可以从工作的ajax向其传递数据?

    1 回复  |  直到 6 年前
        1
  •  1
  •   Oleg    6 年前

    你的代码不起作用,因为你试图使用 headers 选择 jQuery.ajax 方法作为jqgrid的选项。JQGrid没有 标题 选项,但您可以使用 loadBeforeSend 相反,你在哪里打电话 jqXHR.setRequestHeader 方法:

    $('#list').jqGrid({
        url: "/DesktopModules/MVC/CW.GridTest/Item/getArtists2",
        datatype: "json",
        mtype: "POST",
        loadBeforeSend: function (jqXhr) {
            var rvToken = $("input[name='__RequestVerificationToken']").val();
            var moduleId = @Dnn.ModuleContext.ModuleId;
            var tabId = @Dnn.ModuleContext.TabId;
    
            jqXHR.setRequestHeader("ModuleId", moduleId);
            jqXHR.setRequestHeader("TabId", tabId);
            jqXHR.setRequestHeader("RequestVerificationToken", rvToken);
    
            return true; // allow the Ajax request
        },
        ...
    });