ASP.NET MVC Удаление строк данных jquery - PullRequest
0 голосов
/ 05 марта 2019

У меня проблема с удалением, редактированием строки из jquery datatable, она постоянно сообщает мне об этой ошибке

словарь параметров содержит пустую запись для параметра 'id' ненулевого типа

Я выясняю, что проблема заключается в том, что я передаю идентификатор, так как когда я помещаю идентификатор непосредственно в код Ajax, он работает хорошо

Вот моя Product модель:

public partial class Products
{

    public int ID { get; set; }

    // Other properties removed for brevity
}

И delete метод в контроллере

public ActionResult delete(int id)
{
      db.Configuration.ProxyCreationEnabled = false;

      Products d = db.Products.Where(m => m.ID == id).FirstOrDefault<Products>();
      db.Products.Remove(d);
      db.SaveChanges();

      return Json("success", JsonRequestBehavior.AllowGet);
}

Вот моя строка DataTable, где расположена кнопка delete.

 {
       "data": "id", "render": function (data) {
                     console.log(data);
                     return "<a class='btn btn-success' onclick=Editrow(" + data + ") style='margin-left:12px'><i class='glyphicon glyphicon-edit'></i> Edit Record<a/>  <a class='btn btn-danger' onclick=DeleteRow(" + data + ")><i class='glyphicon glyphicon-trash'></i> Delete<a/>";
 },

Здесь dataстановится неопределенным.

Вот мой код Ajax:

 function DeleteRow(id) {
            if (confirm("Are You sure to delete this record..?")) {
                $.ajax({

                    type: 'POST',
                    //url: "/Products/delete/" + id,
                    url: '@Url.Action("delete", "Products")/' + id,
                    datatype: 'JSON',
                    //data: JSON.stringify({ id: id }),
                    success: function (response) {
                        if (response == "success") {

                            alert("Data Deleted successfully..");
                            window.location.reload();
                            //$("#myModal").modal('hide');
                        }
                    },
                    error: function (msg) {
                        alert(msg.responseText);
                    }

                });
            }
        }

Примечание: - когда я непосредственно добавляю идентификатор, я хочу удалить в коде Ajax, как это, он работает хорошо

url: '@Url.Action("delete", "Products")/' + 10,

Ответы [ 2 ]

0 голосов
/ 05 марта 2019

Значение id, переданное в событие onclick, содержит undefined, поскольку вы используете параметр data, значение которого undefined.Попробуйте использовать параметр full функции секции render с именем столбца ID в качестве ключа (я предположил, что вы не поместите кнопку внутри определения столбца, который содержит данные):

// delete button column definition
{ "data": null,
  "render": function (data, type, full, meta) {
     return "<a class='btn btn-danger' onclick=\'DeleteRow(" + full['idcolumnnamehere'] + ")\'><i class='glyphicon glyphicon-trash'></i>Delete</a>";
  }
}

Затем настройте AJAXвызов с идентификатором, как в примере ниже:

function DeleteRow(id) {
    if (confirm("Are You sure to delete this record..?")) {
        $.ajax({
           type: 'POST',
           url: '@Url.Action("Delete", "Products")',
           data: { id: id },
           datatype: 'json',
           success: function (response) {
               // do something with response
           },
           error: function (msg) {
               alert(msg.responseText);
           }
       });
    }
}

В качестве альтернативы, если параметр full по-прежнему не работает, используйте глобальный идентификатор и установите его значение с помощью data.id, затем используйте этот идентификатор в обратном вызове AJAXкоторый предоставил в этом выпуске .

Примечание:

Поскольку вы используете запрос POST, убедитесь, что ваш контроллер украшен [HttpPost] атрибут и удалите JsonRequestBehavior.AllowGet, потому что это требуется только для запроса GET:

[HttpPost]
public ActionResult Delete(int id)
{
    // delete record here
    return Json("success");
}
0 голосов
/ 05 марта 2019

Сделайте это следующим образом:

{
    "data": "ID", "render": function (data) { // <-- `ID` instead of `id`
                   return "<a class='btn btn-success' onclick=Editrow(" + data + ") style='margin-left:12px'><i class='glyphicon glyphicon-edit'></i> Edit Record<a/>  <a class='btn btn-danger' onclick=DeleteRow(" + data + ")><i class='glyphicon glyphicon-trash'></i> Delete<a/>";
},

Теперь все должно работать.

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