微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

提交保存更改时传递ColID而不是jqGrid行索引

如何解决提交保存更改时传递ColID而不是jqGrid行索引

| 我有启用了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返回有关错误的信息。     

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。