问题描述
|
我有启用了EDIT,DELETE,ADD和VIEW的jqgrid,现在我的问题是,当我单击编辑按钮时,它将成功以编辑模式完全打开对话框。现在,当我提交更改时,它将通过jqgrid行索引而不是ColID(ColId为PK,AutoIdentity为True)。我想将ColID作为参数传递。
以下是我的代码段:
jQuery(document).ready(function () {
jQuery(\"#list\").jqgrid({
//url: \'/TabMaster/GetGridData\',url: \'/TabMaster/DynamicGridData\',datatype: \'json\',mtype: \'GET\',colNames: [\'col ID\',\'First Name\',\'Last Name\'],colModel: [
{ name: \'colID\',index: \'colID\',width: 100,align: \'left\' },{ name: \'FirstName\',index: \'FirstName\',width: 150,align: \'left\',editable: true },{ name: \'LastName\',index: \'LastName\',width: 300,editable: true }
],pager: jQuery(\'#pager\'),rowNum: 4,rowList: [1,2,4,5,10],sortname: \'colID\',sortorder: \"asc\",viewrecords: true,gridview: true,multiselect: true,imgpath: \'/scripts/themes/steel/images\',caption: \'Tab Master information\'
}).navGrid(\'#pager\',{ edit: true,add: true,del: true },//Edit Options
{
savekey: [true,13],reloadAfterSubmit: true,jqModal: false,cloSEOnescape: true,closeAfterEdit: true,url: \"/TabMaster/Edit/\",afterSubmit: function (response,postdata) {
if (response.responseText == \"Success\") {
jQuery(\"#success\").show();
jQuery(\"#success\").html(\"Company successfully updated\");
jQuery(\"#success\").fadeOut(6000);
return [true,response.responseText]
}
else {
return [false,response.responseText]
}
}
});
});
这是我正在获取JQRowIndex
[AcceptVerbs(HttpVerbs.Post)]
public ActionResult Edit(int id,FormCollection updateExisting)
{
TabMasterviewmodel editExisting = new TabMasterviewmodel();
editExisting = _tabmasterService.GetSingle(x => x.colID == id);
try
{
UpdateModel(editExisting);
_tabmasterService.Update(editExisting);
return Content(\"Success\");
}
catch
{
return Content(\"Failure Message\");
}
}
这是生成JSON响应的逻辑。
方法:1
*这不会显示任何记录,甚至不会触发任何异常*
public JsonResult DynamicGridData(string OrderByColumn,string OrderType,int page,int pageSize)
{
int pageIndex = Convert.ToInt32(page) - 1;
int totalRecords = GetTotalCount();
int totalPages = (int)Math.Ceiling((float)totalRecords / (float)pageSize);
IQueryable<TabMasterviewmodel> tabmasters = _tabmasterService.GetQueryTabMasterList(OrderByColumn,OrderType,page,pageSize);
var jsonData = new
{
total = totalPages,page = page,records = totalRecords,rows = (from tm in tabmasters
select new
{
id = tm.colID,cell = new string[] { tm.colID.ToString(),tm.FirstName,tm.LastName }
}).ToArray()
};
return Json(jsonData,JsonRequestBehavior.AllowGet);
}
以下是完美的工作。 (这工作正常,但我想使用Method:1而不是Method:2)
方法:2
public ActionResult GetGridData(string sidx,string sord,int rows)
{
return Content(JsonForJqgrid(GetDataTable(sidx,sord,rows),rows,GetTotalCount(),page),\"application/json\");
}
public int GetTotalCount()
{
return Convert.ToInt32(_tabmasterService.Count());
}
public DataTable GetDataTable(string OrderByColumn,int pageSize)
{
TabMasterListviewmodel models = _tabmasterService.GetTabMasterList(OrderByColumn,pageSize,page);
DataTable dt = new DataTable();
dt.Columns.Add(new DataColumn(\"colID\",Type.GetType(\"system.int32\")));
dt.Columns.Add(new DataColumn(\"FirstName\",Type.GetType(\"System.String\")));
dt.Columns.Add(new DataColumn(\"LastName\",Type.GetType(\"System.String\")));
foreach (TabMasterviewmodel model in models.TabMasterList)
{
DaTarow dr = dt.NewRow();
dr[0] = model.colID;
dr[1] = model.FirstName;
dr[2] = model.LastName;
dt.Rows.Add(dr);
}
var rows = dt.Rows.Count;
return dt;
}
public static string JsonForJqgrid(DataTable dt,int pageSize,int totalRecords,int page)
{
int totalPages = (int)Math.Ceiling((float)totalRecords / (float)pageSize);
StringBuilder jsonBuilder = new StringBuilder();
jsonBuilder.Append(\"{\");
jsonBuilder.Append(\"\\\"total\\\":\" + totalPages + \",\\\"page\\\":\" + page + \",\\\"records\\\":\" + (totalRecords) + \",\\\"rows\\\"\");
jsonBuilder.Append(\":[\");
for (int i = 0; i < dt.Rows.Count; i++)
{
jsonBuilder.Append(\"{\\\"id\\\":\" + dt.Rows[i][0].ToString() + \",\\\"cell\\\":[\");
for (int j = 0; j < dt.Columns.Count; j++)
{
jsonBuilder.Append(\"\\\"\");
jsonBuilder.Append(dt.Rows[i][j].ToString());
jsonBuilder.Append(\"\\\",\");
}
jsonBuilder.Remove(jsonBuilder.Length - 1,1);
jsonBuilder.Append(\"]},\");
}
jsonBuilder.Remove(jsonBuilder.Length - 1,1);
jsonBuilder.Append(\"]\");
jsonBuilder.Append(\"}\");
return jsonBuilder.ToString();
}
解决方法
我想问题的根源是在
GetGridData
中错误地填充了JSON数据。因为您的代码包含“ 5”,所以我可以假设您使用了一些非常古老的jqGrid示例。在一些旧示例中,一个错误是在JSON数据中使用i
而不是id
。如果jqGrid在输入数据中找不到id
属性,它将使用整数1
,2
等作为id。我想这是你的情况。如果您至少包括GetGridData
的最后几行,我们将会看到。
我建议您查看答案的“更新”部分并下载相应的演示项目。它不仅显示了如何在ASP.NET MVC 2.0中实现数据分页,排序和筛选,而且还显示了如何使用异常从ASP.NET MVC返回有关错误的信息。