【发布时间】:2016-08-17 09:03:48
【问题描述】:
我一直在 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”作为 NodeController 的 Detail 操作的参数,但它确实拒绝这样做。 name 这里始终为空。
我还弄乱了Startup.Configure 中的路由,将以下路由添加到控制器:
routes.MapRoute(
name: "Node Detail",
template: "{controller=Node}/{action=Detail}/{name}");
但不幸的是,无济于事。每次我调用操作时,无论是通过单击上面列出的链接,还是通过在浏览器中输入 URL 手动访问详细操作,ASP.NET Core 都会输出以下日志行:
Microsoft.AspNetCore.Mvc.Internal.ControllerActionInvoker:Information: 执行动作方法 Aegis.Controllers.NodeController.Detail (Aegis) 带参数 () - ModelState 有效
我在这里不知所措 - 我是否遗漏了一些非常明显的东西,或者 ASP.NET Core 是否不适用于原始类型,我是否应该求助于我在指南中看到的“模型绑定”(像这样简单的动作似乎有点矫枉过正)?
我见过与此类似的各种其他问题,但没有一个是针对 ASP.NET Core 的。我在经典的 ASP.NET 中做过类似的项目,但该框架从未遇到过这个问题。
任何帮助将不胜感激。感谢您的宝贵时间!
【问题讨论】:
标签: c# asp.net-mvc asp.net-core