gpt4 book ai didi

c# - ActionLink 不正确处理 URL,但 RouteLink 正确处理属性路由

转载 作者:行者123 更新时间:2023-11-30 12:27:34 26 4
gpt4 key购买 nike

我偶尔会让 ActionLink 拒绝在我的应用程序中使用占位符创建正确的 URL,但是当我在 Route 属性上指定一个 Name 时,它会生成 URL 属性。

我最近遇到的问题是:

[RoutePrefix("RuleConfiguration")]
public class RuleConfigurationController : EntityController<RuleConfigurationModel, RuleConfiguration>
{
//...Snip...
[Route("{configurationId}/Edit", Name = "RuleConfigurationEdit")]
public async Task<ActionResult> Edit(int configurationId)
{
return View(...);
}
//...Snip...
}

鉴于此设置,我希望 ActionLink 像这样使用时:

@Html.ActionLink(name, "Edit", "RuleConfiguration", new { configurationId = conf.Id })

按照 /RuleConfiguration/1/Edit 给我一个 url。但是,我只得到/RuleConfiguration。当像这样使用 RouteLink 时:

@Html.RouteLink(conf.Name, "RuleConfigurationEdit", new { configurationId = conf.Id })

这会生成预期的 URL。在同一个 View 中,我有一个 ActionLink 生成指向另一个操作的链接,并且该操作使用预期的操作名称生成。一个区别是这个其他操作没有任何路由参数。

我已经检查(多次)我传递的参数 ActionLink 拼写是否正确,并且 URL 参数是否与函数期望的相匹配。 RouteName 参数被添加以查看 RouteLink 是否可以工作,ActionLink 没有按预期工作或之后。

我是否缺少一些完全愚蠢的东西?

最佳答案

从第一个 View 片段开始:

@Html.ActionLink(
name,
"Edit",
"RuleConfiguration",
new {
configurationId = conf.Id
}
)

此代码段使用 this ActionLink 过载方法:

public static MvcHtmlString ActionLink(
this HtmlHelper htmlHelper,
String linkText,
String actionName,
Object routeValues,
Object htmlAttributes
)

这会产生以下 HTML:

<a configurationId="1" href="">Hoge</a>

configurationId 属性被添加到元素中,因为最后一个参数是 htmlAttributes 参数。

我发现,如果当前请求已通过 RuleConfigurationController 进行路由,则只需调用以下似乎 即可正常工作(使用 this 重载):

@Html.ActionLink(name, "Edit", new { configurationId = 1 })

这会产生以下 HTML:

<a href="/RuleConfiguration/1/Edit">Fuga</a>

但是,当尝试引用不同 Controller 中的操作时,这似乎不起作用。


要将重载与您打算提供的参数一起使用,请使用 this一:

public static MvcHtmlString ActionLink(
this HtmlHelper htmlHelper,
String linkText,
String actionName,
String controllerName,
Object routeValues,
Object htmlAttributes
)

如果您不使用 htmlAttributes 参数,可以将 null 传递给它,这样您的代码片段就变成了:

@Html.ActionLink(
name,
"Edit",
"RuleConfiguration",
new {
configurationId = conf.Id
},
null
)

这会生成预期的 anchor 元素,并且因为指定了 Controller 名称,所以在引用当前请求未通过其路由的 Controller 时它也可以工作。

关于c# - ActionLink 不正确处理 URL,但 RouteLink 正确处理属性路由,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24944677/

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