ASP .Net核心路由问题?

时间:2020-09-25 15:47:08

标签: c# asp.net-core asp.net-core-mvc

我是 跟随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);
    }

Index View for Category

1 个答案:

答案 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动作,但这似乎也遇到了同样的问题。