asp .net mvc jqgrid returns post 错误

asp .net mvc jqgrid returns error on post

我的 jqgrid 正在返回 "The server encountered an unexpected condition that prevented it from fulfilling the request":

$('#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 从不触发我的控制器。我只是得到错误。

另一方面,完全相同的 url 在标准 ajax 调用中工作得很好:

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 ?

您的代码不起作用,因为您尝试使用 jQuery.ajax 方法的 headers 选项作为 jqGrid 的选项。 jqGrid 没有 headers 选项,但您可以使用 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
    },
    ...
});