ASP.NET MVC UrlHelper.Action()没有返回正确的路径

时间:2011-05-06 14:03:31

标签: c# asp.net-mvc asp.net-mvc-3 asp.net-mvc-routing

我在尝试使用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
    );
}

2 个答案:

答案 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;
}