【发布时间】:2018-05-13 13:32:33
【问题描述】:
我在 Core 2.0 MVC 应用程序中遇到了意外行为。看看这个:
我有一个控制器“ProfileController.cs”,方法很简单:
public async Task<IActionResult> Index()
{
return View();
}
public async Task<IActionResult> Edit()
{
return View();
}
我在 Profile/Index.cshtml 中有以下标记:
<a asp-controller="Profile" asp-action="Edit">Edit Profile</a>
我在 Startup.cs 中使用以下路由映射:
routes.MapRoute(
name: "default",
template: "{controller=Home}/{action=Index}/{id?}");
但这是我看到的疯狂行为:
锚标签 ALWAYS 无论如何都会生成并导致 profile/index!。 asp-action="Edit" 被完全忽略,如果 url 上有其他参数,则会导致“index”甚至“index/2”。
为什么?
我知道我的路由工作正常,因为只需输入 /profile 或 /profile/index 或 /profile/edit 即可呈现正确的页面。
【问题讨论】:
-
这段代码看起来不错。您确定是此代码导致了问题吗?
-
不,我确信我在其他地方遗漏了一些东西。但无论如何,我没有看到剃须刀引擎如何简单地忽略它给出的动作指令。它一定是在做一些神奇的事情,而不仅仅是应用请求的代码。
-
我刚刚尝试了与本地项目中相同的代码,它运行良好
-
我有不同但相似的问题。 asp-action 标签适用于某些方法,但不适用于其他方法。它只是忽略了我的控制器上的 Index() 方法。如果我将它重命名为 IndexLOL() 那么它工作正常。
标签: asp.net-mvc razor asp.net-core asp.net-core-2.0