Как мне обойти конфликт ASP.Net MVC Route mapping? - PullRequest
1 голос
/ 01 августа 2010

В моем приложении MVC сопоставлены два маршрута:

public class MvcApplication : System.Web.HttpApplication
{
    public static void RegisterRoutes(RouteCollection routes)
    {
        routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

    routes.MapRoute(
        "Project",
        "{controller}/{projectid}/{action}/{id}",
        new { controller = "Project", action = "Index", id = "" });

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

}

По большей части они не создают проблем, но у меня возникают проблемы при попытке вызвать представление / Account / LogOn. Мой синтаксис ActionLink выглядит так (я пробовал несколько вариантов, включая нулевые значения маршрута и т. Д.):

<%= Html.ActionLink("Log On", "LogOn", "Account") %>

При просмотре этого представления возникает ошибка 404 («Ресурс не найден»). В идеале я хотел бы избежать огромного количества переделок, так как лучше всего избежать этих столкновений?

1 Ответ

1 голос
/ 02 августа 2010

Вы пробовали этот вариант с литералом для контроллера?

public class MvcApplication : System.Web.HttpApplication
{
    public static void RegisterRoutes(RouteCollection routes)
    {
        routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

    routes.MapRoute(
        "Project",
        "Project/{projectid}/{action}/{id}",
        new { controller = "Project", action = "Index", id = "" });

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

Это будет ловить: http://localhost/Project/12 и http://localhost/Project/12/Edit и http://localhost/Project/2/View/2

Но он передаст http://localhost/Account/LogOn во второй раунд. Да?

...