Передайте ColID вместо jqGrid Row Index при отправке сохранения изменений - PullRequest
0 голосов
/ 13 июня 2011

У меня есть 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, align: 'left', 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);
    }

Следующее работает отлично. (это работает нормально, но я хочу использовать метод: 1 вместо метода: 2) Метод: 2

public ActionResult GetGridData(string sidx, string sord, int page, int rows)
        {
            return Content(JsonForJqgrid(GetDataTable(sidx, sord, page, rows), rows, GetTotalCount(), page), "application/json");
        }
        public int GetTotalCount()
        {
            return Convert.ToInt32(_tabmasterService.Count());
        }
        public DataTable GetDataTable(string OrderByColumn, string OrderType, int page, int pageSize)
        {
            TabMasterListViewModel models = _tabmasterService.GetTabMasterList(OrderByColumn, OrderType, 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();
        }

1 Ответ

2 голосов
/ 13 июня 2011

Я полагаю, что источником вашей проблемы является неправильное заполнение данных JSON в GetGridData.Поскольку ваш код содержит imgpath, я могу предположить, что вы используете очень старый пример jqGrid.В некоторых старых примерах это была ошибка, которая использовала i вместо id в данных JSON.Если jqGrid не находит свойство id во входных данных, в качестве идентификаторов используются целые числа 1, 2 и т. Д.Я полагаю, это ваш случай.Если вы включите хотя бы последние строки вашего GetGridData, мы увидим это.

Я рекомендую вам посмотреть ОБНОВЛЕННУЮ часть ответа и загрузить соответствующую демоверсию проект .В нем не только показано, как реализовать разбиение на страницы, сортировку и фильтрацию данных в ASP.NET MVC 2.0, но и дополнительно показано, как использовать исключения для возврата информации об ошибке из ASP.NET MVC.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...