Перенаправление на другой контроллер / Действие не зарегистрировано в маршруте - PullRequest
3 голосов
/ 01 сентября 2011

Имеется контроллер, как показано ниже, который не зарегистрирован в таблице маршрутов

public class InternalController : Controller
{
 /*this controller is not registered in routes table*/ 

      public ActionResult Foo()
      {
         return Content("Text from foo");
      }
}

От другого контроллера, который зарегистрирован в таблице маршрутов я хочу позвонить /действие перенаправления предыдущего контроллера, который не зарегистрирован в таблице маршрутов.

public class AjaxController : Controller
{
 /*this controller is registered in routes table*/  

      public ActionResult Foo()
      {

           /*FROM HERE HOW DO I RETURN CONTENTS OF  
            controller=InternalController, action = Foo
           */

            /*
              i tried below piece of code but that doesnt seem to work
            */

            return RedirectToAction("Foo", "InternalController ");
      } 
}

Заданные маршруты (добавлен только один элемент)

    public void RegisterRoutes(RouteCollection routes)
    {
       routes.MapRoute("Ajax","ajax/{action}",new {
       controller="Ajax",
       action="Index"
       });
   }

Ответы [ 3 ]

1 голос
/ 01 сентября 2011

Если вы решите не регистрировать маршрут ... тогда, возможно, файл / контроллер находится в определенном месте, которое не изменится.

В этом случае просто используйте метод "Redirect",вместо "RedirectToAction".

Например:

return Redirect("~/Internal/Foo");
0 голосов
/ 19 октября 2014

Вы можете создать RedirectController для перенаправления большего количества URL и страниц:

public class RedirectController : Controller
{
    public ActionResult Index()
    {
        var rd = this.RouteData.Values;
        string controller = rd["controller2"] as string;
        string action = rd["action2"] as string;

        rd.Remove("controller2");
        rd.Remove("action2");
        rd.Remove("controller");
        rd.Remove("action");

        return RedirectToActionPermanent(action, controller, rd);
    }
}

И затем вы можете определить перенаправление со старого URL в таблицах маршрутизации:

routes.MapRoute(
 null, // Name
 "ajax/foo",
 new { controller = "Redirect",
       action = "Index",
       controller2 = "InternalController",
       action2 = "Foo"}
);

Этот шаблон также полезенесли вы перенаправите старый URL на новый.Например:

routes.MapRoute(
 null, // Name
 "default.aspx", // redirect from old ASP.NET
 new { controller = "Redirect",
 action = "Index",
 controller2 = "Home",
 action2 = "Index" }
);
0 голосов
/ 01 сентября 2011

Теперь, когда вы показали свое определение маршрутов, очевидно, что вы никогда не сможете вызвать другой контроллер, кроме AjaxController. Вы просто запрещаете их в своих маршрутах, поэтому InternalController никогда не сможет быть подан. Вам придется изменить определение маршрута.

В зависимости от того, чего вы хотите достичь и как вы хотите, чтобы ваши URL выглядели так, у вас есть несколько возможностей:

  • Оставить маршрут по умолчанию
  • Измените существующее определение маршрута следующим образом:

    routes.MapRoute(
        "Ajax",
        "{controller}/{action}",
        new { controller = "Ajax", action = "Index" }
    );
    
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...