Как передать объект методу действия в ASP. NET Core MVC - PullRequest
0 голосов
/ 08 мая 2020

Я могу передать объект для редактирования из моего представления в мой метод действия Upsert, используя Tag-Helpers, как это ...

Это мой Index.cs html :( Взгляните на Редактировать ссылку ниже)

   @foreach (var item in Model)
        {
            <tr>
                <td>@item.CategoryID    </td>
                <td>@item.CategoryName    </td>
                <td>
                    <a asp-area="Admin" asp-controller="Category" asp-action="Upsert" asp-route-CategoryID="@item.CategoryID" asp-route-CategoryName="@item.CategoryName">Edit</a>
                </td>
            </tr>
        }

Это мой метод действия:

   [HttpPost]
    public IActionResult Upsert(Category category)
    {
        ViewBag.Name = category.CategoryName;
        ViewBag.ID = category.CategoryID;
        return View();
    }

И данные будут успешно переданы методу действия Upsert.

Вопрос: Как сделать передать данные в jquery / ajax? Для этого мне нужна такая ссылка:

 <a href="/Admin/Category/Upsert/@item.CategoryID" >Edit</a>

, и я действительно не могу использовать Tag-Helpers в jquery. Я могу передать CategoryID только в jquery / ajax и не знаю как передать другое поле CategoryName и, наконец, передать объект Category моему методу действия Upsert? Ниже я получаю данные, вызывающие метод GetAll (набираю: «GET»), визуализирую данные в таблице и создаю кнопку «Изменить» для каждой строки. Я хочу передать полный объект методу Upsert (набираю: «POST» )? Я могу сделать переменную в каждом l oop, но из l oop она не определена!

 $.ajax({
    url: "/Admin/Category/GetAll",
    type: "GET",
    contentType: "application/json;charset=utf-8",
    dataType: "json",
    success: function (result) {
        var html = '';
        $.each(result, function (key, item) {
            html += `
                     <tr>
                       <td>${item.categoryID}</td>
                       <td>${item.categoryName}</td>
                       <td> <div class="text-center">
                            <a href="/Admin/Category/Upsert/${item.categoryID}" class="btn btn-success">Edit</a>
                            <a class="btn btn-danger">Delete</a>
                            </div>
                     </td>
                     </tr>
                   ` ;
            console.log(item);
        });
        console.log(result);
        $('#tblData tbody').html(html);
    },

});

1 Ответ

1 голос
/ 09 мая 2020

Два момента, которые вам следует знать:

1. Ссылка представляет собой запрос Get, поэтому вам следует изменить метод [HttpPost] на Upsert на [HttpGet].

2. asp-route-* генерирует строку запроса, а не значение маршрута в URL-адресе, если вы хотите сгенерировать ссылку в успешной функции ajax и щелкните ее, чтобы отправить объект категории Upsert method, изменить код, как показано ниже:

    $.each(result, function (key, item) {
                html += `
                         <tr>
                           <td>${item.categoryID}</td>
                           <td>${item.categoryName}</td>
                           <td> <div class="text-center">
                                <a href="/Admin/Category/Upsert?CategoryID=${item.categoryID}&CategoryName=${item.categoryName}" class="btn btn-success">Edit</a>
                                <a class="btn btn-danger">Delete</a>
                                </div>
                         </td>
                         </tr>
                       ` ;
                console.log(item);
            });

Результат

enter image description here

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