Что не так с этими правилами маршрутизации asp.net mvc? - PullRequest
0 голосов
/ 04 сентября 2010

Я определил серию маршрутов в Global.asax.cs:

   public static void RegisterRoutes(RouteCollection routes)
    {
        routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
        routes.MapRoute(null, "", // Only matches the empty URL (i.e. ~/)
                        new
                        {
                            controller = "Stream",
                            action = "Entry",
                            streamUrl = "Pages",
                            entryUrl = "HomePage"
                        }
        );

        routes.MapRoute(null, "{streamUrl}", // matches ~/Pages
                        new { controller = "Stream", action = "List" }
        );

        routes.MapRoute(null, "{streamUrl}/{entryUrl}", // matches ~/Pages/HomePage
                        new { controller = "Stream", action = "Entry" }
        );

        routes.MapRoute(
            "Default", // Route name
            "{controller}/{action}/{id}", // URL with parameters
            new { controller = "Home", action = "Index", id = UrlParameter.Optional } // Parameter defaults
        );

Когда я добавляю mydomain.com/ или mydomain.com/Pages/HomePage, маршрут работает точно так, как я ожидаю. Так что теперь я пишу частичное представление для генерации списка ссылок. в качестве теста я поставил этот код в частичном представлении:

<ul>
<% foreach (var item in Model) { %>

        <li id="<%:item.Text.Replace( " ", "-") %>">

            //This works - link shows up in browser as mydomain.com/
            <%: Html.RouteLink(item.Text, new{ streamUrl = "Pages", entryUrl = "HomePage" }) %>

            //This does not work - link shows up as mydomain.com/Blog?entryUrl=BlogEntryOne
            //instead of mydomain.com/Blog/BlogEntryOne
            <%: Html.RouteLink(item.Text, new{ streamUrl = "Blog", entryUrl = "BlogEntryOne" }) %>

        </li>

<% } %>
</ul>

Я не уверен, почему значение маршрута entryUrl не регистрируется правильно. Чего мне не хватает?

1 Ответ

2 голосов
/ 04 сентября 2010

Я не ужасно , привыкший к MVC, но я думаю, что вы должны сначала указать свой более конкретный маршрут, как в:

routes.MapRoute(null, "{streamUrl}/{entryUrl}", // matches ~/Pages/HomePage
                new { controller = "Stream", action = "Entry" }
);

routes.MapRoute(null, "{streamUrl}", // matches ~/Pages
                new { controller = "Stream", action = "List" }
);
...