传递给控制器的参数总是null

本文关键字:null 参数 控制器 | 更新日期: 2023-09-27 18:02:47

我一直在用ASP开发一个相对简单的应用程序。NET Core,显示网络中各个节点的状态。它显示他们的最新状态,以及其他一些信息。

为此,我创建了一个控制器,该控制器具有一个操作,该操作接受节点的名称,在节点管理器中执行查找,并返回该特定节点的详细视图。这个控制器动作是这样实现的:

public IActionResult Detail(string name)
{
    // Maybe redirect this to the node detail overview once it's done?
    if (string.IsNullOrEmpty(name))
        return View("PageNotFound");
    var viewModel =
        Current.NodeManager.Statuses.FirstOrDefault(s => s.Node.Name.Equals(name, StringComparison.OrdinalIgnoreCase));
    if (viewModel == null)
        return View("PageNotFound");
    return View(viewModel);
}

我从我的概述页面链接到这个操作。我使用的HTML是:

<a asp-area="" asp-controller="Node" asp-action="Detail" asp-route-id="@status.Node.Name">@status.Node.DisplayName</a>
对于我的一个节点,这会产生以下链接:

http://example.com/Node/Detail/Temeria

根据我对ASP的理解。. NET Core文档中,控制器应该在这里捕获"Temeria"作为NodeControllerDetail动作的参数,但它可靠地拒绝这样做。name在这里总是空的。

我也搞砸了Startup.Configure的路由,通过添加以下路由到控制器:

routes.MapRoute(
    name: "Node Detail",
    template: "{controller=Node}/{action=Detail}/{name}");

但不幸的是,没有用。每次调用该操作时,无论是通过单击上面列出的链接,还是通过在浏览器中输入URL手动访问详细操作。. NET Core输出如下日志行:

Microsoft.AspNetCore.Mvc.Internal。ControllerActionInvoker:Information:执行带有参数()的Aegis. controllers . nodeconcontroller . detail (Aegis)的操作方法

我在这里迷路了-我在这里错过了一些非常明显的东西,或者ASP。. NET Core不能与基本类型一起工作,我是否应该诉诸于我在指南中看到的"模型绑定"(对于像这样简单的操作来说,这似乎有点过分)?

我见过很多类似的问题,但是没有一个是针对ASP的。净的核心。我在经典ASP中做过类似的项目。. NET,并且该框架从未出现过此问题。

任何帮助都将非常感激。谢谢你的时间!

传递给控制器的参数总是null

关键在这一行:

<a asp-area="" asp-controller="Node" asp-action="Detail" asp-route-id="@status.Node.Name">@status.Node.DisplayName</a>

我把asp-route-id改成了asp-route-name,一切都很好。所以答案是:

<a asp-area="" asp-controller="Node" asp-action="Detail" asp-route-name="@status.Node.Name">@status.Node.DisplayName</a>