Я сделал контроллер с именем LibraryController, у него есть ActionResult с именем Movie, который принимает параметр (int id).

Я пробовал добавить следующий маршрут в RouteConfig.cs:

        routes.MapRoute(
            name: "Movie",
            url: "Library/Movie/{id}",
            defaults: new { controller = "Library", action = "Movie", id = (string)null }
        );

Но в методе Movie(string id) идентификатор равен нулю, даже если я перенаправляю браузер на /Library/Movie/1

Что с этим? MapRoute определен до Default.

0
Jason94 3 Янв 2014 в 17:45

2 ответа

Лучший ответ

Как упоминалось в моем комментарии, попробуйте использовать

id = UrlParameter.Optional or id ="MovieId" or id = ""


routes.MapRoute(
                name: "Movie",
                url: "{controller}/{action}/{id}",
                defaults: new { controller = "Library", action = "Movie", id = UrlParameter.Optional }
            );

Тогда ваш контроллер будет выглядеть так:

    public class LibraryController : Controller
    {
        public ActionResult Movie(int? id)
        {
            if (id == null)
            {
                return new HttpStatusCodeResult(HttpStatusCode.BadRequest);
            }

            Movie m = _context.Movies.Find(id);

            if (m == null)
            {
                return HttpNotFound();
            }

            return View(m);
        }
    }
1
Jon Douglas 3 Янв 2014 в 23:32

Вам следует использовать UrlParameter.Optional

В противном случае, скорее всего, внутренние компоненты, анализирующие маршрут, вызовут ваше действие / метод с null.

Правильная реализация значения необязательного параметра для маршрута:

routes.MapRoute(
    name: "Movie",
    url: "Library/Movie/{id}",
    defaults: new { controller = "Library",
                    action = "Movie",
                    id = UrlParameter.Optional }
);

Ваш контроллер и действие должны быть:

public class LibraryController : Controller
{
    public ActionResult Movie(string id)
    {
        // do something with id here
        return View();
    }
}
1
Silvermind 3 Янв 2014 в 22:03