Загрузите MVC Core View (вызывая действие) с помощью нажатия кнопки в таблице данных JQuery

BUDDHIKA спросил: 31 июля 2018 в 09:50 в: javascript

У меня есть таблица данных с представлением MVC, и в этих таблицах данных каждая запись имеет в ней кнопку редактирования.

Когда нажата кнопка редактирования, мне нужно передать идентификатор записи методу действия MVC и загрузить MVC-представление для редактирования формы из действия MVC.

Это мои данные JQuery табличный код.

function PopulateQueryGrid(data) {
        $('#querytable').dataTable({
            destroy: true,
            data: data,
            columns: [
                { "data": "type", "name": "Product Type", "autoWidth": true },
                {
                    "data": "isDeleted",
                    "render": function(data, type, full) {
                        if (full.isDeleted !== true) {
                            return "<div style='background-color:PaleGreen;width:100px;text-align:center;padding:2px'> Active </div>";
                        } else {
                            return "<div style='background-color:orange;width:100px;text-align:center;padding:2px'> Deleted </div>";
                        }
                    }
                },
                {
                    "data": "id",
                    "render": function(data, type, full) {                        **// 1 does not work
                        //return '<input type="button" value="Edit" class="btn btn-info" onclick=\'editItem(' + JSON.stringify(full) + ')\' />';                        // 2 does not work
                        //return '<form asp-controller="ProductType" asp-action="EditProductType" method="get"><input type="hidden" name="typeId" id="typeId" value="' +
                            //full.id +
                            //'" /><input type="submit" class="btn btn-info" value="Edit" /></form>';**                    }
                },
                {
                    "data": "ID",
                    "render": function(data, type, full) {                        return '<input type="button" value="Delete" class="btn btn-danger" onclick=\'deleteItem(' +
                            JSON.stringify(full) +
                            ')\' />';
                    }
                }
            ]
        });
    }    function editItem(item) {        $.ajax({
            url: '/ProductType/EditProductType',
            data: { typeId : item.id },
            type: 'GET',
            contentType: 'application/json; charset=utf-8',            error: function() {
                alert("error");
            }
        });
    }    function deleteItem(item) {
        alert("delete : " + item.id);
    }

И это действие MVC, которое мне нужно вызвать, после нажатия кнопки "Редактировать".

public async Task<IActionResult> EditProductType(int typeId)
    {
        try
        {
            var productType = await _productTypesService.GetProductTypeByIdAsync(typeId);
            return View(productType);
        }
        catch (Exception e)
        {
            Console.WriteLine(e);
            throw;
        }
    }

Ниже это HTTP-сообщение версии того же метода действий.

    [HttpPost]
    public IActionResult EditProductType(ProductTypeViewModel vm)
    {
        try
        {
            if (ModelState.IsValid)
            {
                _productTypesService.EditProductTypeAsync(vm);
                return RedirectToAction("Index");
            }            return RedirectToAction("EditProductType", vm);
        }
        catch (Exception e)
        {
            Console.WriteLine(e);
            throw;
        }
    }

Я пробовал два способа достичь этого до сих пор (оба они комментируются в приведенном выше коде таблицы данных), но не из них работал.

  1. Jquery Ajax
  2. Создайте форму для каждой кнопки редактирования и отправьте данные в действие MVC при нажатии кнопки

Вопрос - как передать значения в действие контроллера MVC из кнопки таблицы данных JS, и загрузить MVC-представление (форму) из этого действия?

Цените свою помощь. Спасибо.

1 ответ

BUDDHIKA ответил: 31 июля 2018 в 02:49

Спасибо за предложение / комментарии. Как указано в комментариях, я заставил его работать, используя тег <a>.

{
                    "data": "id",
                    "render": function(data, type, full) {                        return '<a class="btn btn-info" href="/ProductType/EditProductType?typeId=' + full.id  + '">Edit</a>';
                    }
                },