TagHelper用于传递路由值作为具有此格式/ users / edit / 10的链接的一部分

时间:2015-05-14 04:24:03

标签: asp.net-core asp.net-core-mvc tag-helpers

我需要为我的资源传递ID作为URL的一部分。有没有什么办法可以使用标签帮助程序将链接格式化为/ 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标记,但它仍然生成错误的链接。

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

以上链接生成以下路径。

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

谢谢!

2 个答案:

答案 0 :(得分:1)

考虑到可能Attribute-based路径的复杂性,很难想出一种让taghelper呈现/blog/edit/11之类的链接的方法。

如果上面的链接遵循标准路线,那么根据需要很容易再现;但这不是这种情况。

那么,该怎么办? 命名路线

如果你要定义你的函数:

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

然后您也可以按如下方式定义TagHelper链接:

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

哪个应该呈现以下链接:

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

答案 1 :(得分:0)

根据您的评论,将标记帮助程序属性名称从asp-route-id修改为asp-route-blogid,并且事情应该有效。