Значение параметра не передается в маршрут ASP.NET MVC - PullRequest
4 голосов
/ 25 января 2011

Я учусь создавать собственные маршруты в ASP.NET MVC и попал в кирпичную стену. В моем файле Global.asax.cs я добавил следующее:

public static void RegisterRoutes(RouteCollection routes)
{
    routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

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

    // My Custom Route.
    routes.MapRoute(
        "User_Filter",
        "home/filter/{name}",
        new { controller = "Home", action = "Filter", name = String.Empty }
    );
}

Идея в том, чтобы я смог перейти на http://localhost:123/home/filter/mynameparam. Вот мой контроллер:

public class HomeController : Controller
{
    public ActionResult Index()
    {
        return View();
    }

    public ActionResult Filter(string name)
    {
        return this.Content(String.Format("You found me {0}", name));
    }
}

Когда я перехожу к http://localhost:123/home/filter/mynameparam, вызывается метод контроллера Filter, но параметр name всегда равен null.

Может ли кто-нибудь дать указатель относительно правильного способа построения моего собственного маршрута, чтобы он передавал часть имени в URL в параметр name для Filter().

Ответы [ 2 ]

7 голосов
/ 25 января 2011

Маршрут Default должен быть последним.Попробуйте это так:

public static void RegisterRoutes(RouteCollection routes)
{
    routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

    // My Custom Route.
    routes.MapRoute(
        "User_Filter",
        "home/filter/{name}",
        new { controller = "Home", action = "Filter", name = String.Empty }
    );

    routes.MapRoute(
        "Default", // Route name
        "{controller}/{action}/{id}", // URL with parameters
        new { controller = "Home", action = "Index", id = UrlParameter.Optional } // Parameter defaults
    );
}
1 голос
/ 25 января 2011

Я полагаю, что ваши маршруты должны быть наоборот?

Маршруты обрабатываются по порядку, поэтому, если первый (по умолчанию, OOTB) маршрут соответствует URL, это будет тот, который будет использоваться.

...