当站点发布到服务器时,jqGrid不加载数据

时间:2011-08-13 16:00:41

标签: json asp.net-mvc-3 jqgrid

我的jqGrid有问题。我在这里看到过类似问题的其他帖子,除了我的特殊之处在于数据在我的开发机器中正确加载但是当我在生产服务器上发布网站时,jqGrid将不会加载数据,我得到的只是一个空的网格。除了jqGrid之外,服务器中的每个其他ajax数据请求都能正常工作。我的项目在MVC3中,我在win2008 IIS7中托管该站点。这是我目前的代码:

查看:

<script type="text/javascript">
$(document).ready(function () {
    $("#grid").jqGrid({
        url: '@Url.Action("LoadAction", "Controller", new { area = "Area" })',
        editurl: '@Url.Action("SaveAction", "Controller", new { area = "Area" })',
        datatype: 'json',
        mtype: 'POST',
        colNames: [
            '@Html.LabelFor(v => new foo.bar.MyClass().Property1)',
            '@Html.LabelFor(v => new foo.bar.MyClass().Property2)',
            '@Html.LabelFor(v => new foo.bar.MyClass().Property3)',
            '@Html.LabelFor(v => new foo.bar.MyClass().Property4)'
        ], 
        colModel: [
            { name: 'Property1', index: 'Property1', editable: true },
            { name: 'Property2', index: 'Property2', editable: true, edittype: "select", editoptions: { value: "Option1:Option1;Option2:Option2"} },
            { name: 'Property3', index: 'Property3', editable: true },
            { name: 'Property4', index: 'Property4', editable: true }
        ],
        pager: $('#gridPager'),
        rowNum: 20,
        rowList: [10, 20, 50, 100],
        sortname: 'Property1',
        sortorder: "asc",
        viewrecords: true,
        imgpath: '',
        shrinkToFit: true,
        width: 940,
        height: 300,
        gridview: true
    });
});
</script>
<div>
    <table id="grid" class="scroll" cellpadding="0" cellspacing="0"></table>
    <div id="gridPager" class="scroll" style="text-align:center;"></div>
</div>

控制器:

[Authorize]
public JsonResult LoadAction(string sidx, string sord, int page, int rows)
{
    List<foo.bar.MyClass> list = foo.bar.MyClassController.getAll();

    int pageIndex = Convert.ToInt32(page) - 1;
    int pageSize = rows;
    int totalRecords = list.Count();
    int totalPages = (int)Math.Ceiling((float)totalRecords / (float)pageSize);

    var jsonData = new
    {
        total = totalPages,
        page,
        records = totalRecords,
        rows = (
            from myclass in list
            select new
            {
                id = myclass.Id,
                cell = new string[] { 
                    myclass.Property1, 
                    myclass.Property2, 
                    myclass.Property3, 
                    myclass.Property4
                }
            }).ToArray()
    };
    return Json(jsonData);
}

任何人都知道可能出现什么问题?

谢谢。

2 个答案:

答案 0 :(得分:2)

1)我建议你在jqGrid定义中包含loadError事件处理程序。在这种方式中,您将看到来自服务器的错误响应。请参阅the answer的更新部分。您可以从here加载相应的演示项目。

2)您应该验证发布站点的虚拟目录的配置。您使用[Authorize]属性。因此,应明确禁用“匿名身份验证”并启用“Windows身份验证”,“表单身份验证”或您计划使用的其他身份验证。

答案 1 :(得分:1)

可能有多种原因,主要是Web服务器IIS设置 - 我猜它通常是安全设置,所以你最好调试它以找出真正的原因。您可以在firefox中使用firebug,并在服务器响应请求时查找真正的错误消息吗? (Firebug - &gt;控制台 - &gt;适当的项目 - &gt;响应)你可以从那里开始。

我要尝试的一件事是删除Authorize属性并查看它是否正常工作。

根据您的调试结果确定,这意味着您的路线出现问题。我想我找到了原因。

 public JsonResult LoadAction(string sidx, string sord, int page, int rows)

但你的Url.ActionLink是

   '@Url.Action("LoadAction", "Controller", new { area = "Area" })',

您没有在此处传递参数,因此导致500错误。请修理它,你会得到结果。