#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
действие, но, похоже, это связано с той же проблемой.