我在MVC控制器中创建了一些操作。
public ActionResult DoSmth1(string token)
public ActionResult DoAnother2(string token)
当我必须调用ActionLink ..
=Html.ActionLink<SomeController>( x=> x.DoSmth(item.property), item.property)
=Html.ActionLink<AnotherController>( x=> x.DoAnother(item.property), item.property)
...它会为我生成不同的网址:
/Some/DoSmth/stringvalue
/Another/DoAnother?property=stringvalue
在哪里设置构建URL的方式?我也没有想法......((
好的,有点道: - 如果属性名称与路由模式中使用的属性名称相同 - 例如controller,action和id - MVC将始终使用路由构建器(/ c / a / id)。
这有点帮助(所以 - 尽可能将参数命名为“id”))
但整体问题仍然有效......
必须将命名为与路径中的令牌相同
确切地说 - 我第一次有这个想法。
但是 - 现在我只有默认路由({controller} / {action} / {id}),但仍然在斜杠中使用“property”的URL ...这很奇怪。
答案 0 :(得分:4)
您不会显示您的路线,但在此示例中您几乎肯定会遇到不同的路线。您的操作的参数必须与路由中的标记相同,以便生成的URL将路由标记与ActionLink的lambda形式匹配。与路由令牌不匹配的任何内容都将作为查询字符串参数附加,与第二个URL一样。查看查询字符串参数强有力地证明您隐式传递的名称(在本例中为“property”)与路由令牌不匹配。由于您使用相同的令牌名称获得不同的结果,因此我得出结论您正在使用不同的路由。顺便提一下,我建议使用RouteLink而不是ActionLink构建链接,以便确定您将匹配哪条路线。