【发布时间】:2015-02-03 04:11:23
【问题描述】:
我有一个 MVC 编辑视图,其中包含当然可以编辑的联系信息。在该视图中,我想添加一个包含 JQGrid 的部分,允许用户对联系人进行 CRUD 注释,但我的网格没有加载数据,也没有调用控制器上的方法。谁能给我任何insite?
查看代码
<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());
}
网格模型类
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"},
}
};
}
然后在联系人控制器的编辑调用中,我设置 model.ContactNotesGrid = new ContactNotesJQGridModel GetNotes(int id) 永远不会执行,即使它在 jquery 中指定。
【问题讨论】:
-
尝试使用
postData,如postData: { id: "JQGrid1" }或postData: { id: function () { return document.getElementById('SelectedContact_ContactID').value; } }。我建议您另外添加loadError回调(请参阅the answer)。 -
使用 postData 不允许调用控制器方法
-
你到底测试了什么?您期望服务器上的哪个
id值?如果是数字,请先尝试postData: { id: 123 }。然后在postData: { id: function () {/*here before return*/}}中包含alert(document.getElementById('SelectedContact_ContactID').value);。然后在服务器代码GetNotes的第一行设置断点。您可以使用 IE/Chrome 的开发者工具(按 F12 启动)并检查 HTTP 流量。请务必验证具有正确数值的id是否将添加到发送到服务器的 HTP 请求中。 -
所以我可以删除 jsonReader: 和 prmNames:
-
jsonReader通知 jqGrid 如何处理服务器响应。prmNames在编辑网格时可能很重要。因为您没有包含document.getElementById('SelectedContact_ContactID').value的值,所以很难说什么是正确的。此外,您应该包括服务器响应示例。
标签: c# jquery asp.net-mvc asp.net-mvc-4 jqgrid