我尝试使用以下代码将默认区域中的操作重定向到ControlPanel区域中的操作:
return RedirectToAction(nameof(Areas.ControlPanel.Controllers.HomeController.Index),
nameof(Areas.ControlPanel.Controllers.HomeController).Replace("Controller", ""),
new { area = nameof(Areas.ControlPanel) });但它会在浏览器中生成以下url:https://localhost:44360/Home/Index?area=ControlPanel
当它想要的时候:https://localhost:44360/ControlPanel/Home/Index
你知道我怎么才能修好它吗?
发布于 2018-07-16 22:11:47
我找到了解决方案here。ControlPanel区域中的主控制器必须如下所示:
namespace Solution.Areas.ControlPanel.Controllers
{
[Area(nameof(ControlPanel))]
[Route(nameof(ControlPanel) + "/[controller]")]
public class HomeController : Controller
{
public IActionResult Index() => View();
}
}重要的部分是[Route(nameof(ControlPanel) + "/controller")]。
发布于 2018-07-16 01:20:44
你的陈述不完全清楚,试试这个:
return RedirectToAction("action", "controller", new { area = "area" });发布于 2019-03-02 18:13:04
请确保您的区域路由已先注册:
app.UseMvc(routes =>
{
routes.MapRoute(name: "areas", template: "{area:exists}/{controller=Home}/{action=Index}/{id?}");
routes.MapRoute(name: "default", template: "{controller=Home}/{action=Index}/{id?}");
});为每个区域控制器定义控制器级路由的替代方案:
[Area("[areaname]")]
[Route("[areaname]/[controller]")]
public class YourController : Controller
{
public IActionResult Index() => View();
}所有其他失败使显式使用路由:
var url = Url.RouteUrl("areas", new { controller = "[controller]", action = "Index", area = "[areaname]" });
return Redirect(url);https://stackoverflow.com/questions/51350477
复制相似问题