【问题标题】:asp-route tag helper not resolving with constrained routeasp-route tag helper 无法通过受限路由解析
【发布时间】:2020-07-31 03:48:05
【问题描述】:

我一直试图了解这里发生了什么,但没有运气。我有一个控制器,里面有一些动作,其中两个通过属性标记为帖子。在我看来,这两个帖子使用 asp-route 助手映射到两种不同的形式。这三个路由(它们都使用 Route 属性和特定名称注册)需要一个整数参数作为路由的一部分,该参数被限制为 int。设置第二个asp-route参数时出现问题,问题是form标签中生成的action属性没有被填充。

让我分享一些代码来更好地解释这一点。

控制器:

[Route("teams")]
public class TeamsController: Controller
{
    [Route("list/{groupId:int}", Name = "TeamsList")]
    public IActionResult List(int groupId)
    {
        //some logic
        return View(viewmodel);
    }

    [Route("list/{groupId:int}", Name = "TeamListPost")]
    [HttpPost]
    public IActionResult List(int groupId, int activityId)
    {

        //some logic

        return RedirectToRoute("TeamsList", new {groupId});
    }

    [Route("details/{groupId:int}", Name = "TeamDetailsPost")]
    [HttpPost]
    public IActionResult Details(int groupId)
    {

        //some logic

        return RedirectToRoute("TeamsList", new {groupId});
    }
}

查看:

<form asp-route="TeamListPost"> 
   <button type="submit">Send post</button> 
</form>
<form asp-route="TeamDetailsPost">
   <button type="submit">Send another post</button>
</form>

如果访问 /teams/list/1 这里没有错,第一个表单会生成要设置为 /teams/list/1 的操作属性,我希望如果访问 /teams/list/1,则生成设置为 /teams/details/1 的操作属性的第二种形式,但我得到了一个空的操作属性。

我注意到的一件有趣的事情是,当我从 TeamDetailsPost 路由中移除约束时,它至少会将操作属性呈现为 /team/details,这对我来说毫无意义。

有人知道会发生什么吗?

【问题讨论】:

    标签: asp.net-core-mvc


    【解决方案1】:

    当我在Temas/List.cshtml 中显示两个表单时,我可以重现您的问题。您对此List.cshtml 的请求是teams/list/1。因此您可以默认为第一个表单生成url。但默认AnchorTagHelper找不到其他操作名称的 ID。

    要解决此类问题,您需要在第二种形式中手动指定 id 以及您可以从请求 url 中获取的 id:

    <form asp-route="TeamDetailsPost" asp-route-groupId="@Context.Request.RouteValues["groupId"]">
        <button type="submit">Send another post</button>
    </form>
    

    结果:

    【讨论】:

    • 你完全正确。似乎标签助手无法自己识别我的路由参数。我将更深入地研究后者。感谢您的帮助,非常感谢!另外,当您编写 AnchorTagHelper 时,您的意思是 FormTagHelper?
    • AnchorTagHelper,可以参考here
    • 我已阅读文档,但由于问题出在使用表单,我认为您在谈论 FormTagHelper。尽管如此,它们的工作方式似乎相似。再次感谢@Rena
    猜你喜欢
    • 2017-11-17
    • 2021-03-22
    • 2018-03-17
    • 2021-11-21
    • 1970-01-01
    • 2023-03-26
    • 2014-12-09
    • 2016-04-26
    • 1970-01-01
    相关资源
    最近更新 更多