我需要为我的资源传递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
谢谢!
答案 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
,并且事情应该有效。