MVC中的JQGrid不加载网格

时间:2015-02-03 04:11:23

标签: c# jquery asp.net-mvc asp.net-mvc-4 jqgrid

我有一个MVC编辑视图,其中包含当然可编辑的联系信息。在该视图中,我想添加一个包含JQGrid的部分,允许用户使用联系人的CRUD注释,但我的网格没有加载数据,也没有调用控制器上的方法。谁能给我任何帮助?

查看代码

<div class="panel panel-info">
    <div class="panel-heading">
        <h3 class="panel-info">
           Contact Note</h3>
    </div>
    <div class="panel-body">
        <div class="scrollableContainer" style="margin-top: -10px;">
            <table id="JQGrid1"></table>
            <div id="JQGrid1_pager"></div>
        </div>
    </div>
</div>

    <script>
        $("#JQGrid1").jqGrid({
            url: '@Url.Action("GetNotes", "Contact")',
            mtype: "GET",
            datatype: "json",
            page: 1,
            jsonReader: { id: document.getElementById('SelectedContact_ContactID').value },
            prmNames: { id: document.getElementById('SelectedContact_ContactID').value },
            colNames: ["Id", "ContactId", "Note", "Date Created", "Created By"],
            colModel: [
                { key: true, width: 50, name: "ID", hidden: false },
                { width: 60,  name: "ContactID", hidden: false },
                { width: 460,  name: "Note", hidden: false },
                { width: 160,  name: "DateCreated",
                    formatter: "date", formatoptions: { srcformat: "m/d/Y h:i:s A", newformat: "mm-dd-yyyy" }, hidden: false },
                { width: 160,  name: "CreatedBy", hidden: false },
            ],
            height: "auto",
            caption: "Notes",
            rowNum: 5,
            pager: "#JQGrid1_pager",
        });
      </script>

控制器代码

[HttpGet]
public JsonResult GetNotes(int id)
{
    var gridModel = new ContactNotesJQGridModel();
    var resultset = _contactNoteRepository.GetNotes(id);
    return gridModel.ContactNotesGrid.DataBind(resultset.AsQueryable());
}

GridModel类

public class ContactNotesJQGridModel
{
    public JQGrid ContactNotesGrid { get; set; }

    public ContactNotesJQGridModel()
    {
        ContactNotesGrid = new JQGrid
        {
            Columns = new List<JQGridColumn>()
            {
                new JQGridColumn {DataField = "ID", PrimaryKey = true},
                new JQGridColumn {DataField = "ContactId"},
                new JQGridColumn {DataField = "Note"},
                new JQGridColumn {DataField = "DateCreated"},
                new JQGridColumn {DataField = "CreatedBy"},
            }
        };
    }

然后在Contact Controller中编辑联系人的调用中,我设置model.ContactNotesGrid = new ContactNotesJQGridModel GetNotes(int id),即使在jquery中指定了它,也永远不会执行。

2 个答案:

答案 0 :(得分:1)

您应该使用postData将自定义参数添加到服务器响应中:

postData: { id: 11 }

postData: {
    id: function () {
        return document.getElementById('SelectedContact_ContactID').value;
    }
}

您还需要修改服务器的代码以使用类似

的内容
return Json(someObjectWithReturnedData, JsonRequestBehavior.AllowGet);

我建议您将loadError回调添加到jqGrid选项列表中(请参阅the answer),并将gridview: trueautoencode: true选项添加到jqGrid。

P.S。关于“无法获取属性整数的值”,“无法获取属性decimalSeperator的值”之类的错误。您应该在 i18n/grid.locale-en.js之前验证您是否包含jquery.jqGrid.min.js 等语言环境文件(请参阅the documentation)。

答案 1 :(得分:0)

试试这个:

检查1: 将Jquery脚本移动到文档就绪事件中:

$( document ).ready(function() {
    console.log( "ready!" );
});

检查2: 检查天气您的服务器请求是否有任何问题:

protected void Application_Error(object sender, EventArgs e) 
{
  Exception exception = Server.GetLastError();
  Response.Clear();
}

Global.asax中添加上述代码,并确保在通话过程中没有异常。 (放下断点和检查)

检查3

观看浏览器控制台日志(F12)。如果有任何异常日志请提供。

检查4:

确保调用成功,预期的json格式是否有效。在大多数情况下,这将是主要原因。

以上只是我的猜测/这是我先做的,如果我有一个问题。 :)