【问题标题】:ASP.NET MVC UrlHelper.Action() not returning correct pathASP.NET MVC UrlHelper.Action() 没有返回正确的路径
【发布时间】: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() 是“聪明的”,通过找出HomeIndex 是我的默认路由的默认值,所以http://localhosthttp://localhost/Homehttp://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


【解决方案1】:

一个 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;
}

【讨论】:

  • 是的,这行得通,虽然我不喜欢它。如果没有更好的结果,我会将其标记为答案。 (我不喜欢它主要是因为 URL 看起来很奇怪:“localhost/?id=1013
  • +1 其实我不认为这不是 hacky。也许new { id = "_placeholder_" } 会更好。没有网络服务,我看不到太多其他方式。
  • @Michael:使用我的方法,它会输出完整的 url,例如:/首页/索引/12345
  • 是的,你是对的。在 casper 发表评论后,我开始搞乱我的路线,我打破了路线:) 你的答案是我所选择的,主要是。
【解决方案2】:

解决方法可能是:

function generateLink ( id ) {
  var anchor = "<a href='/?id=" + id + "'>Select Me</a>"
  return anchor;
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-18
    相关资源
    最近更新 更多