C# MVC中的JQGrid未加载网格
我有一个MVC编辑视图,其中包含当然可编辑的联系人信息。在这个视图中,我想添加一个包含JQGrid的部分,允许用户对联系人的注释进行CRUD,但是我的网格没有加载数据,也没有调用控制器上的方法。有人能给我一些提示吗 视图代码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&
<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);