Проблема маршрутизации с параметром - PullRequest
1 голос
/ 17 сентября 2011

Я определил две ссылки действий на мой взгляд, как показано ниже:

@Html.ActionLink("Baxter", "SearchAffaires", new { LabelName = "Baxter" })
@Html.ActionLink("Favorite", "SearchAffaires", new { OnlyFavorite = true })

Я определил два маршрута ниже:

        routes.MapRoute(
        "Search Affaire Only Label", // Route name
        "{controller}/Label/{LabelName}", // URL with parameters
        new { controller = "Affaire", action = "SearchAffaires" } // Parameter defaults
        );

        routes.MapRoute(
        "Search Affaire Only Favorite", // Route name
        "{controller}/Favorite", // URL with parameters
        new { controller = "Affaire", action = "SearchAffaires", OnlyFavorite = true } // Parameter defaults
        );

Если я запускаю свое решение и указываю на свою «любимую» ссылку, я получаю следующий URL:

http://localhost:3817/Affaire/Favorite

Это нормально для меня. Теперь я перезапускаю свое решение (важно) и указываю на ссылку «метка» (в данном примере мой ярлык - «Бакстер»), я получаю следующий URL:

http://localhost:3817/Affaire/Label/Baxter

Это нормально для меня. Теперь я не перезапускаю свое решение и указываю на свою «любимую» ссылку, я получаю следующий URL:

http://localhost:3817/Affaire/Label/Baxter?OnlyFavorite=True

Как видите, параметр OnlyFavorite передается снова, но я этого не ожидал!

Что я могу сделать, чтобы избежать такого поведения?

Спасибо.

1 Ответ

1 голос
/ 17 сентября 2011

Проблема в то время, когда вы добавляете ссылку, MVC не может знать, какой маршрут вы хотите использовать, поскольку он имеет все параметры из текущего запроса, LabelName установлено, поэтому оно совпадает с * 1002. * маршрут.

Вот исправление. также вы можете добавить ограничение, которое LabelName не может быть пустым, поэтому оно соответствует второму маршруту:

routes.MapRoute(
    "Search Affaire Only Label",
    "{controller}/Label/{LabelName}",
    new { controller = "Affaire", action = "SearchAffaires" }
    );

routes.MapRoute(
    "Search Affaire Only Favorite",
    "{controller}/Favorite",
    new
    {
        controller = "Affaire",
        action = "SearchAffaires",
        LabelName = string.Empty,
        OnlyFavorite = true
    }
);

@Html.ActionLink("Baxter", "SearchAffaires", 
                 new { LabelName = "Baxter" })
@Html.ActionLink("Favorite", "SearchAffaires", 
                 new { LabelName = string.Empty, OnlyFavorite = true })
...