我尝试使用以下代码将默认区域中的操作重定向到ControlPanel区域中的操作:
return RedirectToAction(nameof(Areas.ControlPanel.Controllers.HomeController.Index),
nameof(Areas.ControlPanel.Controllers.HomeController).Replace("Controller", ""),
new { area = nameof(Areas.ControlPanel) });
,但它在浏览器中生成以下网址: https://localhost:44360/Home/Index?area=ControlPanel
希望它是:https://localhost:44360/ControlPanel/Home/Index
有什么想法可以解决吗?
答案 0 :(得分:1)
我找到了解决方法here。 ControlPanel区域中的Home控制器必须如下所示:
namespace Solution.Areas.ControlPanel.Controllers
{
[Area(nameof(ControlPanel))]
[Route(nameof(ControlPanel) + "/[controller]")]
public class HomeController : Controller
{
public IActionResult Index() => View();
}
}
重要的部分是[Route(name((ControlPanel)+“ / [controller]”))]。
答案 1 :(得分:0)
您的陈述并不完全清楚, 试试这个:
block.Number()
答案 2 :(得分:0)
我也遇到过同样的情况,经过多次尝试,我将其修复。
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?}");
});
区域模板应该是第一个。 现在,您可以将区域重定向到类似
的区域return RedirectToAction("action name", "controller name", new { area = "area name" });
答案 3 :(得分:0)
确保首先注册您的区域路线:
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);