ASP.Проблема с маршрутизацией сетевого ядра?

#c# #asp.net-core #asp.net-core-mvc

#c# #asp.net-ядро #asp.net-core-mvc

Вопрос:

Я следую за ASP.NET Базовый курс MVC (.NET 5) учебное пособие на YouTube. Я получаю сообщение об ошибке «Эта страница локального хостинга не может быть найдена», когда я нажимаю на кнопку РЕДАКТИРОВАНИЯ, которая используется для перенаправления меня на частичный просмотр моделей категорий. У меня нет ошибок в коде, так как я следую руководству построчно. Мой маршрут, кажется, в порядке:

 app.UseEndpoints(endpoints =>
        {
            endpoints.MapControllerRoute(
                name: "default",
                pattern: "{controller=Home}/{action=Index}/{id?}");
        });
  

Вот представление индекса для категории:

 <tbody>
            @foreach (var obj in Model)
            {
                <tr>
                    <td width="50%">@obj.Name</td>
                    <td width="30%">@obj.DisplayOrder</td>
                    <td class="text-center">
                        <div class="w-75 btn-group" role="group">
                            <a asp-controller="Category" asp-all-route-Id="@obj.Id" asp-action="Edit" class="btn btn-primary mx-2">
                                Edit
                            </a>
                            <a asp-controller="Category" asp-all-route-Id="@obj.Id" asp-action="Delete" class="btn btn-danger mx-2">
                                Delete
                            </a>
                        </div>
                    </td>
                </tr>
            }
        </tbody>
  

И мой метод действий для редактирования:

 //GET -  EDIT
    public IActionResult Edit(int? id)
    {
        if(id == null || id == 0)
        {
            return NotFound();
        }
        var obj = _db.Category.Find(id);
        if(obj == null)
        {
            return NotFound();
        }

        return View(obj);
    }
  

Представление индекса для категории

Комментарии:

1. вы указали контроллер в таблице?

2. Вы бы хотели использовать asp-route-id вместо asp-all-route-Id. Теги имеют некоторые различия, learn.microsoft.com/en-us/aspnet/core/mvc/views/tag-helpers /…

Ответ №1:

Проблема с этой строкой:

 <a asp-controller="Category"
   asp-all-route-Id="@obj.Id"
   asp-action="Edit"
   class="btn btn-primary mx-2">
  

asp-all-route-Id это не то, что распознает помощник по тегу привязки. Из-за этого значение @obj.Id не передается в Edit действие, поэтому его int? id параметр не устанавливается. Это означает return NotFound(); , что строка выполняется и генерирует ответ 404.

Вместо этого вам нужно asp-route-id . Для полноты картины приведем обновленную версию:

 <a asp-controller="Category"
   asp-route-id="@obj.Id"
   asp-action="Edit"
   class="btn btn-primary mx-2">
  

Вы не упомянули Delete действие, но, похоже, это связано с той же проблемой.