0

我将 JQGrid 与我的 mvc 代码一起使用。

我的控制器是

//
        // GET: /Leave/

        public ActionResult CompOff()
        {
            var compoffs = db.RegisterCompOffs.Where(l => l.Employee.Id == this.EmployeeId).ToList();
            return Json(compoffs, JsonRequestBehavior.AllowGet);

        }</code>

compoffs is not null here.. and my view is

@model AGS.Hrms.Models.RegisterCompOff

@{
    ViewBag.Title = "CompOff";
}

<table id="jqgProducts" cellpadding="0" cellspacing="0"></table>
<div id="jqgpProducts" style="text-align:center;"></div>


<script src="@Url.Content("~/Scripts/jquery.jqGrid.min.js")" type="text/javascript"></script>
 <script type="text/javascript">
     $(document).ready(function () {
         $('#jqgProducts').jqGrid({
             //url from wich data should be requested
             url: this.href,
             //type of data
             datatype: 'json',
             //url access method type
             mtype: 'GET',
             //columns names
             colNames: ['CompOffDate', 'IsApproved', 'Description', 'ExpiryDate','IsUtilized'],
             //columns model
             colModel: [
                            { name: 'CompOffDate', index: 'CompOffDate', align: 'left' },
                            { name: 'IsApproved', index: 'IsApproved', align: 'left' },
                            { name: 'Description', index: 'Description', align: 'left' },
                            { name: 'ExpiryDate', index: 'ExpiryDate', align: 'left' }
                            { name: 'IsUtilized', index: 'IsUtilized', align: 'left' }

                          ],
             //pager for grid
             pager: $('#jqgpProducts'),
             //number of rows per page
             rowNum: 10,
             //initial sorting column
             sortname: 'CompOffDate',
             //initial sorting direction
             sortorder: 'asc',
             //we want to display total records count
             viewrecords: true,
             //grid height
             height: '100%'
         });
     });
    </script></code>

在请求此视图时,我在 Firebug 的控制台窗口中收到此 500 Internal server error。有人可以告诉我我在这里做错了什么吗?

4

1 回答 1

1

想到了两种可能:

  1. 以下行var compoffs = db.RegisterCompOffs.Where(l => l.Employee.Id == this.EmployeeId).ToList();引发异常。要查看是否是这种情况,只需在控制器操作中放置一个断点。要修复此错误,您必须分析异常及其原因。
  2. 查询返回的compoffs对象包含循环引用,不能进行 JSON 序列化。要查看是否是这种情况,请在 FireBug 控制台中探索 AJAX 请求的响应,并查找从服务器发送的响应中包含的确切错误消息。它将类似于以下内容:无法序列化 blablah,因为它包含循环引用。要修复此错误,您必须使用视图模型并仅将其实际需要的内容传递给视图,而不是传递整个域对象图。

您的代码有问题的另一件事是以下行:

url: this.href,

this.href处理程序内部没有,document.ready所以我猜 AJAX 请求甚至没有到达控制器。确保您已为应该返回 JSON 的控制器操作指定正确的 url:

url: '@Url.Action("CompOff")',
于 2012-06-26T08:24:25.743 回答