RedirectToAction перенаправляет неправильно с другими пространствами имен asp.net mvc
Я написал свои маршруты так.
routes.MapRoute(
name: "AdminECommerce",
url: "Admin/ECommerce/{controller}/{action}/{id}",
defaults: new { id = UrlParameter.Optional },
namespaces: new []{ "AdminEcommerce.Controllers" }
);
routes.MapRoute(
name: "ECommerce",
url: "ECommerce/{controller}/{action}/{id}",
defaults: new { id = UrlParameter.Optional },
namespaces: new []{ "Ecommerce.Controllers" }
);
routes.MapRoute(
name: "User",
url: "Plugin/User/{controller}/{action}/{id}",
defaults: new { id = UrlParameter.Optional },
namespaces: new []{ "User.Controllers" }
);
routes.MapRoute(
name: "UserRegistration",
url: "Plugin/UserRegistration/{controller}/{action}/{id}",
defaults: new { id = UrlParameter.Optional },
namespaces: new []{ "UserRegistration.Controllers" }
);
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);
Когда я хочу использовать RedirectToAction
от одного действия к другому действию в том же контроллере он перенаправляет куда-то еще.
Например, я хочу, чтобы он перенаправил меня на
Plugin/UserRegistration/Register/Register
Но это отправляет меня
Admin/ECommerce/Register/Register
Я должен упомянуть, что мои контроллеры находятся в других библиотеках.
Что не так с моим кодом?
Обновление: контроллер Registration
public ActionResult Register()
{
ViewBag.securityQuestions = _dataRepository.GetContext().User_SecurityQuestion;
return View();
}
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult RegisterNewUser(User_User model, FormCollection collection)
{
try
{
// register new user
...
return RedirectToAction("Register");
}
catch
{
// making error messages
...
return RedirectToAction("Register");
}
Я тоже попробовал это,
return RedirectToAction("Register","Registration");
Не работает
1 ответ
Решение
ASP.NET MVC распознает эти два маршрута, как один и тот же UriTemplate
routes.MapRoute(
name: "AdminECommerce",
url: "Admin/ECommerce/{controller}/{action}/{id}",
defaults: new { id = UrlParameter.Optional },
namespaces: new []{ "AdminEcommerce.Controllers" }
);
routes.MapRoute(
name: "UserRegistration",
url: "Plugin/UserRegistration/{controller}/{action}/{id}",
defaults: new { id = UrlParameter.Optional },
namespaces: new []{ "UserRegistration.Controllers" }
);
MVC читает таблицу маршрутов сверху вниз, чтобы сопоставить запрошенный URL-адрес с UriTemplate. Итак, в этом случае он выберет первый шаблон.
Попробуйте вместо этого использовать RedirectToRoute.
return RedirectToRoute("Registration", new
{
controller = "Registration",
action = "Register"
});