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