c# - 多条路线相同的动作.NET Core 3.1
问题描述
我正在尝试在 .cshtml 中创建一个锚元素,并在多个之间选择一条特定的路线。
控制器:
[Route(""), Route("Products")]
public class ProductsController : Controller
{
[HttpGet, Route("Search"), Route("Category/{category}")]
public IActionResult SearchAction(string query, string category)
{
...
}
}
.cshtml:
//This two options return "Search?category=A", but I don't want the first route
<a href="@Url.Action("SearchAction", "Products", new { category = "A" })">Link</a>
<a asp-controller="Products" asp-action="SearchAction" asp-route-category="A">Link</a>
//This return null, I want to define which route will be chosen
<a href="@Url.RouteUrl("Search", new { category = "A" })">Link</a>
<a href="@Url.RouteUrl("Products/Search", new { category = "A" })">Link</a>
<a asp-route="Search" asp-route-category="A">Link</a>
<a asp-route="Products/Search" asp-route-category="A">Link</a>
<a href="@Url.RouteUrl("Category", new { category = "A" })">Link</a>
<a href="@Url.RouteUrl("Products/Category", new { category = "A" })">Link</a>
<a asp-route="Category" asp-route-category="A">Link</a>
<a asp-route="Products/Category" asp-route-category="A">Link</a>
<a asp-route="Category/A">Link</a>
<a asp-route="Products/Category/A">Link</a>
解决方案
感谢恩科西
您需要命名路线。
我必须命名路线,但这导致了另一个问题,路线应该有一个唯一的模板来命名。所以我从控制器中删除了路由并仅在操作中指定。
public class ProductsController : Controller
{
[HttpGet, Route("Products/Search", Name = "Products/Search"), Route("Category/{category}", Name = "Products/Category")]
public IActionResult SearchAction(string query, string category)
{
...
}
}
我可以这样使用:
<a asp-route="Products/Category" asp-route-category="A">Link</a>
<a href="@Url.RouteUrl("Products/Category", new { category = "A" })">Link</a>
<a asp-route="Products/Search" asp-route-category="A">Link</a>
<a href="@Url.RouteUrl("Products/Search", new { category = "A" })">Link</a>
推荐阅读
- android - 从右到左输入数字就像解决数学问题 Android Studio
- shell - 如何使 nushell 提示文本不换行?
- powershell - 如何用powershell下载文件?
- git - 无法从远程服务器访问 github。身份验证错误?
- mongodb - MongoDB通过ID数组删除嵌入文档
- python-3.x - 我有一个在 Thonny IDE 中完美运行的 python 脚本,但在终端中失败
- c++ - 如何在 OpenSSL 1.1.x 中访问 BIGNUM 的成员“top”?
- gradle - 在 gradle 插件中运行所有任务
- google-apps-script - 基于特定单元格值的电子表格到日历
- ruby-on-rails - 无法从 API 以“has_many through”关系保存数据