ASP.NET MVC UrlHelper.Action () не возвращает правильный путь - PullRequest
3 голосов
/ 06 мая 2011

У меня возникла проблема при попытке использовать метод 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 самостоятельно?

EDIT:

Я не изменил маршрутизацию по умолчанию для нового проекта 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);
}

Ответы [ 2 ]

2 голосов
/ 06 мая 2011

Один хакерский подход - сделать что-то вроде этого:

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;
}
0 голосов
/ 06 мая 2011

Обходной путь может быть:

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