C# MVC中的JQGrid未加载网格

C# MVC中的JQGrid未加载网格,c#,jquery,asp.net-mvc,asp.net-mvc-4,jqgrid,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&

我有一个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>
网格模型类

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"},
            }
        };
    }
公共类ContactNotesJQGridModel
{
公共JQGrid ContactNotesGrid{get;set;}
公共联系人notesjqgridmodel()
{
ContactNotesGrid=新JQGrid
{
列=新列表()
{
新JQGridColumn{DataField=“ID”,PrimaryKey=true},
新的JQGridColumn{DataField=“ContactId”},
新的JQGridColumn{DataField=“Note”},
新JQGridColumn{DataField=“DateCreated”},
新的JQGridColumn{DataField=“CreatedBy”},
}
};
}
然后在联系人控制器中对联系人的编辑调用中,我设置了
model.ContactNotesGrid=new ContactNotesJQGridModel
GetNotes(int-id)
,即使jquery中指定了它,也不会执行它。

尝试以下操作:

勾选1: 将Jquery脚本移动到document ready事件中:

$( 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格式是否有效。在大多数情况下,这将是主要原因


以上只是我的猜测/如果我有问题,这是我首先做的。

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

postData: { id: 11 }

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

return Json(someObjectWithReturnedData, JsonRequestBehavior.AllowGet);
我建议您将
loadError
回调添加到jqGrid选项列表中(请参阅),并将
gridview:true
autoencode:true
选项添加到jqGrid


关于诸如“无法获取属性整数的值”、“无法获取属性小数分隔符的值”之类的错误,请注意。您应该验证是否在
jquery.jqGrid.min.js
之前包含了类似于
i18n/grid.locale en.js的区域设置文件(请参阅).

我在Global.asax中收到一个错误。该id似乎没有传递给jquery,因为它应该参数字典包含不可为null的类型“System.Int32”的参数“id”,方法“System.Web.Mvc.JsonResult GetNotes”(Int32)'在'ProspectingPlatformWeb.Controllers.ContactController'中。可选参数必须是引用类型、可为Null的类型或声明为可选参数。参数名称:parametersHey Tim….我想您的
结果集
没有名为
“Id”
的字段的值。该字段不可为Null(int)键入要绑定的内容。确保您正确地传递了它。我在一个隐藏字段中有该值。我猜jquery是在文档元素具有该值之前执行的。是的……您是否已将代码移动到
document ready
事件中?尝试使用
postData
类似
postData:{id:“JQGrid1”}
或类似于
postData:{id:function(){return document.getElementById('SelectedContact\u ContactID').value;}}
。我建议您另外添加
loadError
回调(请参阅)。使用postData不允许调用控制器方法。您到底测试了什么?您希望在服务器上使用哪个
id
值?如果它是一个数字,请首先尝试
postData:{id:123}
。然后在
postData:{id:function()中包含
警报(document.getElementById('SelectedContact\u ContactID').value);
{/*此处返回之前*/}
。然后在服务器代码的
GetNotes
的第一行设置断点。您可以使用IE/Chrome的开发工具(按F12启动)并检查HTTP流量。重要的是验证具有正确数值的
id
是否将添加到发送到服务器的HTP请求中。这样我就可以删除jsonReader:和prmNames:
jsonReader
通知jqGrid如何处理服务器响应。
prmNames
在编辑网格期间可能很重要。Beca使用您不包括
文档的值。getElementById('SelectedContact\u ContactID')。值
很难说什么是正确的。此外,您应该包括服务器响应的示例。谢谢,我知道我没有包括。我现在要添加它
postData: {
    id: function () {
        return document.getElementById('SelectedContact_ContactID').value;
    }
}
return Json(someObjectWithReturnedData, JsonRequestBehavior.AllowGet);