English 中文(简体)
ASP.NET MVC Html.ActionLink 的结果URL - 编码方式
原标题:
  • 时间:2009-01-28 19:05:53
  •  标签:

我在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)

它会生成不同的URL:

/Some/DoSmth/stringvalue
/Another/DoAnother?property=stringvalue

在哪里设置构建URL的方式?我已经没有任何想法...((


OK, a got some waylight: - if the property names are the same that used in routing schema - eg controller,action and id - the MVC will always use the route builder (/c/a/id).

那有一点帮助(因此-尽可能命名参数“id”)

但是总体问题仍然存在...


必须与路由中的令牌名称相同

确切地说-我最初就有那个想法。

但是-现在我只有默认路由({controller}/{action}/{id}),但仍然在斜杠中有“property” URL... 这相当奇怪。

  • there s also a cheater way - to create a precise route that match a given controller with it s parameter names - is seems that will be the ultimate answer - but i still don t want to do this ((
问题回答

你没有显示你的路由,但是在这个例子中,你几乎肯定会撞上不同的路由。你的动作参数必须与路由中的令牌命名相同,以便生成的URL与ActionLink的lambda形式匹配路由令牌。与不匹配路由令牌的任何内容都将附加为查询字符串参数,就像你的第二个URL一样。看到查询字符串参数是强有力的证据,说明你传递的隐含名称(在这种情况下为“property”)与路由令牌不匹配。由于你使用相同的令牌名称得到不同的结果,我因此推断你正在撞上不同的路由。顺便说一句,我建议使用RouteLink构建链接,而不是ActionLink,这样你可以确定你将匹配哪个路由。





相关问题
热门标签