0

MVC コードで JQGrid を使用しています。

私のコントローラーは

//
        // 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 内部サーバー エラーが発生します。誰かが私がここで間違っていることを教えてもらえますか?

4

1 に答える 1

1

頭に浮かぶ2つの可能性:

  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 に答える