【发布时间】:2011-05-06 14:03:30
【问题描述】:
我在尝试使用 UrlHelper Action() 方法指向我网站上的 /Home/Index 操作时遇到问题。我需要在客户端脚本中动态生成指向Index 的链接(包括id 参数),所以我做了显而易见的事情:
var url = '@this.Url.Action("Index", "Home")';
function generateLink ( id ) {
var anchor = "<a href='" + url + "/" + id + "'>Select Me</a>"
return anchor;
}
但是这里生成的锚标记是这样的:
<a href='http://localhost//1013'>Select Me</a>
这显然不会路由到正确的操作。我假设Url.Action() 是“聪明的”,通过找出Home 和Index 是我的默认路由的默认值,所以http://localhost 和http://localhost/Home 和http://localhost/Home/Index 在功能上是相同的,但是我需要以某种方式强制它选择完整的 URL 选项。
有没有办法做到这一点,还是我必须自己建立 URL?
编辑:
我没有更改新 MVC3 项目的默认路由:
public static void RegisterRoutes ( RouteCollection routes )
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapRoute(
"Default", // Route name
"{controller}/{action}/{id}", // URL with parameters
new
{
controller = "Home",
action = "Index",
id = UrlParameter.Optional
} // Parameter defaults
);
}
回答:
我最终选择了@BFree 的答案略有不同,只是因为如果我可以使用它,我更喜欢 Html.ActionLink() 而不是 Url.Action:
var anchor = '@this.Html.ActionLink("Select Me", "Index", "Home", new { id = "XXX" }, null)';
function generateLink ( id ) {
return anchor.replace("XXX", id);
}
【问题讨论】:
-
我们需要查看路由定义(最好是全部),这样我们就可以查看是否存在冲突,或者是否有您未指定的路由的参数。
标签: c# asp.net-mvc asp.net-mvc-3 asp.net-mvc-routing