asp.net mvc2 Как я могу использовать Actionlink для перехода от корня прямо к странице сведений

На корневой странице моего проекта у меня есть несколько различных страновых услуг, собранных по категориям на одной странице. Категория — это страница «Индекс» в папке «Просмотр» в отдельной области, а конкретная служба — это представление «Подробности». Я хочу, чтобы пользователь мог сразу перейти от категории в области (в данном случае Китая) к этой конкретной детали услуги.

У меня есть это:

<%=Html.ActionLink("More Info", "Details", "ParticularChinaServiceControllerName", new { area = "China" }, new { id = p.ID })%>

но фреймворк не подберет идентификатор.

Маршрут зарегистрирован как: public override string AreaName { get { return "China"; } }

    public override void RegisterArea(AreaRegistrationContext context)
    {
        context.MapRoute(
            "China_default",
            "China/{controller}/{action}/{id}",
            new { action = "Index", id = UrlParameter.Optional }
        );
    }
}

Может ли кто-нибудь показать мне, как заставить это работать правильно?


person Paul Connolly    schedule 04.07.2010    source источник


Ответы (1)


Измените имя вашего контроллера с «ParticularChinaServiceController» на «ParticularChinaService» и посмотрите, решит ли это проблему.

Подожди, последний аргумент:

new { id = p.Id }

... на самом деле является аргументом htmlAttributes и будет применять этот идентификатор в качестве атрибута гиперссылки, сгенерированной в html. Измените предыдущий аргумент на этот:

new { area = "China", id = p.Id }

И отбросьте последний аргумент (если вам не нужно применять какие-то определенные атрибуты на стороне клиента).

person Matthew Abbott    schedule 04.07.2010
comment
нет, к сожалению, нет, это просто подстановочное имя для демонстрационных целей этого сайта вместо настоящего, но спасибо за это - person Paul Connolly; 04.07.2010
comment
Да, я уже пробовал это, но он просто создает /Details?Length=27, что заставляет меня думать, что мне все еще не хватает одного маленького кусочка в этом заявлении actionlink. - person Paul Connolly; 05.07.2010
comment
Но! альт! Я взял то, что вы сказали, поменял местами, добавил нуль в качестве параметра атрибута, например: new {id = p.ID, area = China},null, и это сработало, большое спасибо. - person Paul Connolly; 05.07.2010
comment
окончательный оператор гласит: ‹%=Html.ActionLink(Дополнительная информация, Подробности, ParticularChinaServiceControllerName, new {id = p.ID, area = China}, null)%› - person Paul Connolly; 05.07.2010