【问题标题】:asp .net mvc jqgrid returns error on postasp .net mvc jqgrid 在发布时返回错误
【发布时间】:2018-12-23 11:06:43
【问题描述】:

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

另一方面,完全相同的 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 传递给它?

【问题讨论】:

    标签: asp.net ajax model-view-controller jqgrid


    【解决方案1】:

    您的代码不起作用,因为您尝试使用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
        },
        ...
    });
    

    【讨论】:

    • 做到了。谢谢。
    猜你喜欢
    • 2021-07-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-26
    • 2021-09-07
    • 2011-11-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多