Как работает RedirectToRoute и как передавать в него данные? - PullRequest
0 голосов
/ 25 января 2019

Я пытаюсь перенаправить на маршрут, который находится в RecomController, и действие - Index, я определил путь в моем файле RouteConfig и также указал параметр id, который я передаю, когда вызываю свою функцию RedirectToRoute.По какой-то причине он не может найти этот путь.

Я также создал атрибут Route выше действия RecomController Index, но он все еще не указывает мне этот путь.Я что-то упустил?

RouteConfig.cs:

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

            routes.MapRoute(
                name: "Default",
                url: "{controller}/{action}/{id}",
                defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
            );
            routes.MapRoute(
            name: "Recomroute",
            url: "{controller}/{action}/{id}",
            defaults: new { controller = "Recom", action = "Index", id = UrlParameter.Optional }
            );
        }

RecomController.cs:

 [Route("Recom/Index")]
        public ActionResult Index(int id)
        {
         ............//Functioning
        }

Вызов функции (В ДРУГОЙ КОНТРОЛЛЕР):

ProjectController.cs:

return RedirectToRoute("Recom/Index/{id}", new {id = projectdto.Id });

1 Ответ

0 голосов
/ 25 января 2019

Звучит так, как будто вы используете неверное имя или путь в RedirectToRoute(), следовательно, оно не работает:

// this is wrong because first parameter did not match
return RedirectToRoute("Recom/Index/{id}", new {id = projectdto.Id });

Для перегрузки двух параметров требуется имя маршрута (не путь маршрута) и значения маршрута, как показано в определении ниже:

protected internal RedirectToRouteResult RedirectToRoute(string routeName, 
                           RouteValueDictionary routeValues)

Следовательно, вам необходимо предоставить полное имя маршрута и значения маршрута, определенные в RegisterRoutes (например, Recomroute).

return RedirectToRoute("Recomroute", new {
    controller = "Recom", 
    action = "Index", 
    id = projectdto.Id
});

Примечания:

1) Вам все еще необходимо предоставить параметры controller, action и id для соответствия определению маршрута.

2) Кажется, что Recomroute определен ниже маршрута по умолчанию с тем же определением сегментов маршрута, которое переопределяет все пользовательские маршруты под ним, если вы хотите оценить Recomroute, сначала переместите его в верхний порядок и используйте другой путь в сравнении с маршрутом по умолчанию.

...