我是 跟随YouTube上的ASP.NET Core MVC课程(.NET 5)教程。当我单击“编辑”按钮时,出现错误消息“找不到此本地主机页面”,该按钮用于将我重定向到类别模型的局部视图。我没有代码错误,因为我逐行关注本教程。我的路由似乎还可以:
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);
}
答案 0 :(得分:1)
此行有问题:
<a asp-controller="Category" asp-all-route-Id="@obj.Id" asp-action="Edit" class="btn btn-primary mx-2">
asp-all-route-Id
不是Anchor Tag Helper能够识别的东西。因此,没有将值@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
动作,但这似乎也遇到了同样的问题。