我在尝试使用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
和{{1}和http://localhost/Home
在功能上是相同的,但我需要以某种方式强制它选择完整的URL选项。
有没有办法做到这一点,或者我是否必须自己构建URL?
编辑:
我没有更改新MVC3项目的默认路由:
http://localhost/Home/Index
解答:
我最终对@BBree的答案略有不同,只是因为我更喜欢Html.ActionLink()到Url.Action,如果我可以使用它:
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
);
}
答案 0 :(得分:2)
一种hacky方法是做这样的事情:
var url = '@this.Url.Action("Index", "Home", new { id = 1})';
function generateLink ( id ) {
var anchor = "<a href='" + url.replace("1",id) + "'>Select Me</a>"
return anchor;
}
答案 1 :(得分:0)
解决方法可能是:
function generateLink ( id ) {
var anchor = "<a href='/?id=" + id + "'>Select Me</a>"
return anchor;
}