TagHelper,用于将路由值作为 link 的一部分传递,格式为 /users/edit/10

TagHelper for passing route values as part of a link with this format /users/edit/10

我需要为我的资源传递一个 ID 作为 URL 的一部分。有什么方法可以使用标签助手将 link 格式化为这样 /users/edit/10 吗?

我在另一个问题上看到了以下示例,但这给了我 user/edit?id=10&foo=bar。不是我真正想要的。 :(

<a asp-action="Edit" asp-route-id="10" asp-route-foo="bar">Edit</a>

下面是我试图实现的实际功能:

[HttpGet]
[Route("[controller]/edit/{blogId:int}")]
public IActionResult BlogEdit(int blogId)
{

    Blog blog = _blogRepo.GetById(blogId);

    BlogEditViewModel blogEditViewModel = new BlogEditViewModel
    {
        Title = blog.Title,
        Body = blog.Body,
        Id = blog.Id
    };

    ViewBag.Title = "Edit Blog";
    return View(blogEditViewModel);
}

我尝试使用下面的 a 标签,但它仍然生成不正确的 link。

<a asp-controller="Blog" asp-action="BlogEdit" asp-route-blogId="11">Edit Blog 11</a>

上面link生成下面的路径

http://localhost:52409/Blog/edit?blogId=11

谢谢!

根据您的意见,将标签助手属性名称从 asp-route-id 修改为 asp-route-blogid,应该可以了。

鉴于 Attribute-based 路由 可能 的复杂性,很难想出一种方法让 taghelper 渲染 link 像 /blog/edit/11.

如果上面的link走的是标准路线,那么重现就变得很容易了;但这里不是这样。

那么,怎么办? 命名路由

如果您要像这样定义函数:

HttpGet]
[Route("[controller]/edit/{blogId:int}", Name = "BlogEdit")]
public IActionResult BlogEdit(int blogId)
{
    ...
}

那么你也可以定义一个 TagHelper link 如下:

<a asp-route="BlogEdit" asp-route-blogId="11">Edit Blog 11</a>

应该呈现以下 link:

<a href="/blog/edit/11">Edit Blog 11</a>