RouteLink пустой Href - PullRequest
       27

RouteLink пустой Href

0 голосов
/ 02 июля 2011

Я использую MVC3 с Razor View Engine. Я хочу использовать определенный маршрут для Href

Ниже приведена регистрация маршрута (кажется, что маршрут работает, поскольку я могу использовать браузер для его непосредственного использования)

routes.MapRoute(
    "AddItem",
    "{listAreaName}/{listSlug}/Add",
    new { controller = "List", action = "AddItem" }
    );

но @ Html.RouteLink просто не работает. возвращает ссылку на пустую ссылку для ссылки

Вот некоторые из моих попыток

@Html.RouteLink("Add New Item", "AddItem", new { controller="List", action="AddItem", listAreaName = Model.ListAreaName, listSlug = Model.Slug })<br />
@Html.RouteLink("Add New Item1", "AddItem", new { controller = "List", listAreaName = Model.ListAreaName, listSlug = Model.Slug })<br />
@Html.RouteLink("Add New Item2", "AddItem", new { action = "AddItem", listAreaName = Model.ListAreaName, listSlug = Model.Slug })<br />
@Html.RouteLink("Add New Item3", "AddItem", new { controller = "list", action = "additem", listAreaName = Model.ListAreaName, listSlug = Model.Slug })<br />
@Html.RouteLink("Add New Item4", "additem", new { controller = "List", action = "AddItem", listAreaName = Model.ListAreaName, listSlug = Model.Slug })<br />

@Html.RouteLink("Add New Item5", "additem", new { listAreaName = Model.ListAreaName, listSlug = Model.Slug })<br />
@Html.RouteLink("Add New Item6", "AddItem", new { controller = "ListController", action = "AddItem", listAreaName = Model.ListAreaName, listSlug = Model.Slug })<br />

если я пропустил название маршрута, он генерирует рабочую ссылку, но его нет в правильном формате

Большая часть материала, который я нашел, была для предварительной версии v1. эта проблема была отсортирована?

есть идеи?

Ответы [ 2 ]

2 голосов
/ 02 июля 2011

В последней ссылке на маршрут у вас есть ошибка, вы не должны использовать суффикс Controller:

@Html.RouteLink(
    "Add New Item6", 
    "AddItem", 
    new { 
        controller = "List", 
        action = "AddItem", 
        listAreaName = Model.ListAreaName, 
        listSlug = Model.Slug 
    }
)

Что касается остальных, то все они генерируют следующий URL: /ListAreaName/Slug/Add в ASP.NET MVC 3 RTM, если у вас настроены маршруты по умолчанию и вы добавили маршрут, показанный в вашем вопросе.

1 голос
/ 02 июля 2011

Редактировать

Только один элемент в вашем маршруте может быть опущен по умолчанию.У вас нет значений по умолчанию для listAreaName или listSlug.См. Этот вопрос: маршрутизация asp mvc с двумя дополнительными параметрами

routes.MapRoute(
    "AddItem",
    "{listAreaName}/{listSlug}/Add",
    new
    {
        controller = "List",
        action = "AddItem",
        listAreaName = "foo", // <-- add these
        listSlug = UrlParameter.Optional
    });

Оригинал

Ваш маршрут на самом деле не включает контроллер и действиепараметры.Вы пытались опустить их в значениях маршрута (они будут выведены, когда маршрут будет декодирован по запросу).Другая вещь, которую я хотел бы сделать, это убедиться, что модель действительно включает значения ListAreaName и Slug.

@Html.RouteLink("Add New Item",
                "AddItem",
                new
                {
                     listAreaName = Model.ListAreaName,
                     listSlug = Model.Slug 
                })<br />

Кроме того, вам действительно следует использовать CSS для стилизации их как элементов уровня блока, а нечем добавление <br/> после него, если это вообще возможно.

<style>
   .block { display: block; }
</style>

@Html.RouteLink("Add New Item",
                "AddItem",
                new
                {
                     listAreaName = Model.ListAreaName,
                     listSlug = Model.Slug 
                },
                new { @class = "block" })
...