gpt4 book ai didi

asp.net-mvc - ActionLink 不起作用,但 RouteUrl 起作用

转载 作者:行者123 更新时间:2023-12-01 03:01:56 25 4
gpt4 key购买 nike

我有路线

// Sample URL: /Fixtures/Team/id
routes.MapRoute(
"Fixtures-by-TeamID",
"Fixtures/Team/{teamId}",
new { controller = "Fixtures", action = "GetByTeamID", },
new { teamId = @"\d{1,3}" }
);

我正在尝试在 ASP.net MVC p5 中使用 ActionLink。
<%= Html.ActionLink(g.HomeTeam.TeamName, "Team", new { teamId = g.HomeTeam.TeamID })%>

但是它不起作用并给了我
<a href="/Fixtures/Team?teamId=118">Team A</a>

如果我使用 Url.RouteUrl,我会得到正确的链接。
<a href="<%=Url.RouteUrl("Fixtures-by-TeamID", new { teamId = g.HomeTeam.TeamID })%>"><%=g.HomeTeam.TeamName%></a>   

<a href="/Fixtures/Team/118">Team A</a>

任何帮助都会很棒吗?这会在 ASP.net MVC 测试版中发生变化吗?

谢谢

唐纳德

最佳答案

根据我的经验,只有当你只有一个默认路由时, Action 路由才能真正正常工作。一旦你开始添加像上面这样的自定义路由, Action 路由就会变成......我想“挑剔”是正确的词。匹配系统的工作方式并不完全符合您的预期。

在这种情况下,您说操作是“Team”,但是此路由与“Team”的操作不匹配,它只匹配“GetTeamByID”。因此,路由系统继续运行并最终根据默认路由为您提供路由。 teamId 不是您默认路由的明确组成部分,因此它最终作为附加在末尾的查询参数。

MVC Beta 已经发布,这个行为没有改变。

另外,你不觉得命名路线更清晰吗?就我个人而言,我愿意。

我什至更进一步,实际上为我所有的自定义路由创建了路由助手,在您当前的示例中可能如下所示:

<a href="<%= Url.FixturesByTeam(g.HomeTeam.TeamID) %>"><%= g.HomeTeam.TeamName %></a>

甚至:
<%= Html.LinkToFixturesByTeam(g.HomeTeam) %>

您可以直接从模型中提取名称和 ID 的值。

关于asp.net-mvc - ActionLink 不起作用,但 RouteUrl 起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/238317/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com