Почему моя форма не передает идентификатор контроллеру?

У меня настроена веб-страница asp.net mvc. Все мои действия, такие как: создание, редактирование и т. д., имеют свои собственные представления, кроме удаления, потому что я пытаюсь открыть модальное окно с помощью Bootstrap. Я передаю идентификатор модальному модулю через jQuery/JavaScript и с asp-action в качестве атрибута формы, теоретически он должен работать, но это не так.

Представление индекса:


@if (Model.Tenants.Any())
{
    <h3>Tenants (@Model.Tenants.Count)</h3>
    <div class = "table-responsive">
        <table class = "table table-striped table-sm">
            <thead>
            <tr>
                <th></th>
                <th>Name</th>
                <th>Id</th>
                <th>UrlFriendlyName</th>
                <th>MicrosoftGraphTenantId</th>
                <th></th>
            </tr>
            </thead>
            <tbody>
            @foreach (var tenant in Model.Tenants.OrderByDescending(x => x.Name))
            {
                <tr>
                    <td>
                        <button class = "btn btn-primary" onclick = "document.location.href = '@Url.Action("Index", "User", new {id = tenant.Id})'">Show Users</button>
                    </td>
                    <td>
                        @tenant.Name
                    </td>
                    <td>
                        @tenant.Id
                    </td>
                    <td>
                        @tenant.UrlFriendlyName
                    </td>
                    <td>
                        @tenant.MicrosoftGraphTenantId
                    </td>
                    <td>
                        <div class = "btn-group-justified pull-right ">
                            <button class = "btn btn-success" onclick = "document.location.href = '@Url.Action("Edit", "Tenant", new {id = tenant.Id})'">Edit</button>
                            <button type = "button" class = "btn btn-danger" onclick = "deleteTenant('@tenant.Id', '@tenant.Name')" data-toggle = "modal" data-target = "#deleteModal">Delete</button>
                        </div>
                    </td>
                </tr>
            }
            </tbody>
        </table>
    </div>

    <div class = "align-items-sm-end">
        <button onclick = "document.location.href='@Url.Action("Create", "Tenant")'" class = "btn btn-outline-success">Create new Tenant</button>
    </div>

    <div class = "modal fade" id = "deleteModal" data-backdrop = "static" data-keyboard = "false" tabindex = "-1" aria-labelledby = "staticBackdropLabel" aria-hidden = "true">
        <div class = "modal-dialog modal-dialog-centered">
            <div class = "modal-content">
                <div class = "modal-header">
                    <h5 class = "modal-title"></h5>
                    <button type = "button" class = "close" data-dismiss = "modal" aria-label = "Close">
                        <span aria-hidden = "true">&times;</span>
                    </button>
                </div>
                <div class = "modal-body">
                    <p>Are you sure you want to delete the selected Tenant?</p>
                </div>
                <div class = "modal-footer">
                    <form asp-action = "Delete">
                        <input type = "hidden" id = "tenantidinput"/>
                        <button type = "submit" class = "btn btn-outline-danger">Delete Tenant</button>
                    </form>
                    
                    <button type = "button" class = "btn btn-secondary" data-dismiss = "modal">Cancel</button>
                </div>
            </div>
        </div>
        
    </div>
    


}


Удалить действие в контроллере:


        [HttpPost]
        [ValidateAntiForgeryToken]
        public async Task<IActionResult> DeleteAsync(Guid id)
        {
            if (ModelState.IsValid && id != Guid.Empty)
            {
                var tenant = await _context.Tenants.AsQueryable().Where(x => x.Id == id).FirstOrDefaultAsync().ConfigureAwait(false);
                _context.Tenants.Remove(tenant);
                await _context.SaveChangesAsync().ConfigureAwait(false);
                
            }
            return RedirectToAction("Index");

            
        }

Javascript:


function deleteTenant(tenantid, tenantname) {
    $(".modal-title").text("Delete " + tenantname);
    $("#tenantidinput").attr("name", ''+tenantid+'');
}


Введите получение идентификатора в качестве значения имени:

При отладке он вообще не получает идентификатор:

Функция javascript получает параметры просто отлично. Я думаю, что проблема кроется в том, как форма передает id контроллеру. Он почему-то не передает значение атрибута имени.

Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
1
0
391
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Это происходит по двум причинам. Во-первых, скрытый input должен иметь имя, совпадающее с аргументом в действии. В вашем случае id:

<input type = "hidden" name = "id" id = "tenantidinput" />

Во-вторых, ваш JS должен устанавливать value поля, а не его name:

function deleteTenant(tenantid, tenantname) {
  $(".modal-title").text("Delete " + tenantname);
  $("#tenantidinput").val(tenantid);
}

Другие вопросы по теме