我有一个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中指定了它,也永远不会执行。
答案 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: true
和autoencode: 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格式是否有效。在大多数情况下,这将是主要原因。
以上只是我的猜测/这是我先做的,如果我有一个问题。 :)