c# - 为什么 asp-route 和 asp-action 互斥?
问题描述
我有以下路线:
routes.MapRoute(name: "default", template: "{controller=Home}/{action=Index}/{id?}");
routes.MapRoute(name: "out", template: "outbound/{controller=Home}/{action=Index}/{id?}");
为什么不允许这样做?此传出 URL 是从HomeController
操作方法生成的 =Index
<a asp-route="out" asp-action="a" asp-route-id="someIdValue">This is an outoing URL.</a>
生成此传出 URL 的视图来自HomeController
'Index
方法。
为什么它不使用"out"
路由模板而只"a"
用于操作,并Home
用作控制器来生成/outbound/Home/a/someIdValue
?
我能够为 提供一个值id
,为什么我不能为操作提供一个值?
解决方案
您可以使用asp-area
而不是asp-route
.
启动.cs
app.UseMvc(routes =>
{
routes.MapRoute(name: "out", template: "{area=Outbound}/{controller=Home}/{action=Index}");
routes.MapRoute(
name: "default",
template: "{controller=Home}/{action=Index}/{id?}");
});
控制器
[Area("Outbound")]
public class HomeController : Controller
{
public IActionResult Index()
{
return View();
}
}
<a href="/outbound/home/index">Go to Outoing’ Home Page by href="/outbound/home/index"</a> <br>
<a asp-area="Outbound" asp-controller="Home" asp-action="Index">Go to Outoing’ Home Page by asp-area</a><br>
@Html.ActionLink("Go to Outoing’ Home Page by @Html.ActionLink", "Index", "Home", new { area = "Outbound" })
测试截图
该asp-route
属性用于创建直接链接到命名路由的 URL。使用路由属性,路由可以被命名,如所示SpeakerController
并在其Evaluations
操作中使用:
[Route("/Speaker/Evaluations",
Name = "speakerevals")]
public IActionResult Evaluations() => View();
在以下标记中,asp-route
属性引用了命名路由:
<a asp-route="speakerevals">Speaker Evaluations</a>
Anchor Tag Helper 使用 URL 生成直接到该控制器操作的路由/Speaker/Evaluations
。生成的 HTML:
<a href="/Speaker/Evaluations">Speaker Evaluations</a>
如果在 之外指定asp-controller
或,则生成的路由可能不是您所期望的。asp-action
asp-route
为避免路由冲突,asp-route
不应与asp-controller
andasp-action
属性一起使用。
顺便说一句,default route
并area route
根据调用它们的顺序自动为它们的端点分配一个顺序值。
asp-route
和asp-controller
&之间的区别asp-action
Route names( asp-route
) 可用于根据特定路由生成 URL。
同时,{controller}/{action}
还生成到Home
控制器和Test
动作的 URL 映射。
//works
<a asp-controller="home" asp-action="test">asp-controller="home" asp-action="test"</a><br>
//works
<a asp-route="test">asp-route="test"</a><br>
//InvalidOperationException
<a asp-route="test" asp-controller="home" asp-action="test">asp-route="test" asp-controller="home" asp-action="test"</a>
InvalidOperationException
在一个<a>
标签中同时设置时发生。
推荐阅读
- nginx - 使用 nginx ffmpeg 问题转码流
- python - 如何使用 Beautiful Soup 找到带有特定文本的 href 链接?
- mysql - 错误代码:1054。“字段列表”中的未知列“喜欢”
- java - 当我自己使用参数字符串抛出异常时,究竟会发生什么?什么时候调用 toString 方法?
- android - 根据月份和年份对多视图类型 RecyclerView 进行排序
- python - 如何使用张量流有效地提取给定长度的所有切片
- jekyll - 如何在包含标签后运行 Jekyll 插件?
- python - 如果另一列数据在列表中,熊猫会更改一列数据
- javascript - 如何使用异步调用完成一系列信息?
- html-framework-7 - 无法在 framework7 中设置堆叠标签