2

我需要将我的资源的 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

谢谢!

4

2 回答 2

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>
于 2015-08-06T20:11:07.063 回答
0

根据您的评论,将标签助手属性名称从asp-route-idto修改为asp-route-blogid应该可以工作。

于 2015-05-14T13:52:42.160 回答