2015-03-13 4 views
3

Не могли бы вы помочь мне, как я мог бы сделать, чтобы удалить несколько записей, выбранных в моем jqgrid? Я пробовал несколько способов, но пока не получил никакого успеха. Я буду благодарен всем, кто может мне помочь.Как удалить многократные регистры в jqgrid с помощью asp.net mvc?

jQuery("#grid-table").jqGrid({ 
     //direction: "rtl", 
     url: "/Lojas/GetLojas", 
     datatype: 'json', 

     mtype: 'Get', 
     height: '100%', 
     colNames: [ ' ', 
        'Name', 
        'Description' 
        ], 
     colModel: [ 
      { 
       name: 'myac', index: '', width: 65, fixed: true, sortable: false, resize: false, 
       formatter: 'actions', 
       formatoptions: { 
        keys: true, 
        delOptions: { recreateForm: true, url: '/Lojas/Delete', beforeShowForm: beforeDeleteCallback }, 
        editformbutton: true, editOptions: { recreateForm: true, url: '/Lojas/Edit', closeAfterEdit: true, beforeShowForm: beforeEditCallback, closeOnEscape: true } 
       } 
      }, 
      { key: true, hidden: true, name: 'Id', index: 'Id', sorttype: "int", editable: false }, 
      { key: false, name: 'Name', index: 'Name', editable: true}, 
      { key: false, name: 'Description', index: 'Description', editable: true} 
     ], 

     viewrecords: true, 
     loadonce: true, 
     rowNum: 10, 
     rowList: [5, 10, 15], 
     jsonReader: { 
      root: "rows", 
      page: "page", 
      total: "total", 
      records: "records", 
      repeatitems: false, 
      Id: "0" 
     }, 
     pager: pager_selector, 
     altRows: true, 
     autowidth: true, 
     multiselect: true, 
     multiboxonly: true, 
     sortorder: "desc", 
     multiboxonly: true, 
     caption: "Lojas Cadastradas" 
    }); 

     //navButtons 
    jQuery("#grid-table").jqGrid('navGrid', pager_selector, 
     { 
      edit: true, 
      add: true, 
      del: true, 
      search: true, 
      refresh: true, 
      view: true, 
     }, 
     { 
      url: '/Lojas/Edit', 
      closeOnEscape: true, 
      closeAfterEdit: true, 
      recreateForm: true 
     }, 
     { 
      url: '/Lojas/Create', 
      closeOnEscape: true, 
      closeAfterAdd: true, 
      recreateForm: true 
     }, 
     { 
      url: '/Lojas/Delete', 
      closeOnEscape: true, 
      closeAfterDelete: true, 
      recreateForm: true 
     }, 
     { 
      //search form 
      recreateForm: true, 
      closeOnEscape: true, 
      closeAfterSearch: true, 
      multipleSearch: true 
     }, 
     { 
      //view record form 
      recreateForm: true 
     } 
    ) 

код в мой контроллер:

public ActionResult Delete(Loja loja) 
    { 
     Loja lojaToDelete = db.Lojas.Find(loja.Id); 
     if (lojaToDelete == null) 
     { 
      return HttpNotFound(); 
     } 
     db.Lojas.Remove(lojaToDelete); 
     db.SaveChanges(); 
     return View(loja); 
    } 

ответ

2

Я рекомендую вам изменить прототип функции удаления public ActionResult Delete(Loja loja) в

public void Delete(string id) 

Основная проблема в коде состоит в следующем. Соответствует the documentation jqGrid post id параметр url: '/Lojas/Delete'. Вы можете переименовать имя параметра id, используя prmNames. В случае, если вы можете использовать prmNames: {id: "Id"}, но это не требуется.

Если несколько строк нужно исключить, то id строка будет через запятую, и вы можете использовать что-то вроде

public void Delete(string id) 
{ 
    var ids = id.Split(','); 
    foreach (lojaId in ids) { 
     Loja lojaToDelete = db.Lojas.Find(lojaId); 
     if (lojaToDelete == null) 
      throw new HttpResponseException(HttpStatusCode.NotFound); 
     db.Lojas.Remove(lojaToDelete); 
    } 
    db.SaveChanges(); 
} 
+0

Большое спасибо за ваше решение, Олег! Я просто изменил код, чтобы преобразовать строку в целое число, чтобы найти запись в базе данных, и этот код работал отлично! Спасибо!!! Окончательный код: 'общественного недействительными Delete (строка ID) { \t вар Идентификаторы = id.Split (''); \t foreach (var lojaId in ids) { int idLoja = Convert.ToInt32 (lojaId); \t \t Loja lojaToDelete = db.Lojas.Find (idLoja); \t \t если (lojaToDelete == NULL) \t \t \t бросить новый HttpResponseException (HttpStatusCode.NotFound); \t \t db.Lojas.Remove (lojaToDelete); \t} \t db.SaveChanges(); } ' – David

+0

@ Давид: Добро пожаловать! Я просто написал код без его тестирования. Я рекомендую вам проверить, правильно ли выбрано исключенное исключение в вашей среде, или вы должны использовать другой. Вы можете использовать обратный вызов 'errorTextFormat' для настройки текста, отображаемого на стороне клиента при ошибке удаления. На стороне сервера можно настроить сериализацию исключений (см. 'HandleJsonExceptionAttribute' в [старом ответе] (http://stackoverflow.com/a/5501644/315935)). – Oleg

Смежные вопросы