【发布时间】:2018-08-06 06:29:40
【问题描述】:
我在更改路由后无法呈现 URL 地址。
路由配置
public class AccountArea : AreaRegistration
{
public override void RegisterArea(AreaRegistrationContext context)
{
context.MapRoute(
"Account",
"Account/{controller}/{action}/{id}",
new { controller = "User", action = "Index", id = UrlParameter.Optional },
namespaces: new[] {
"Application.Controllers.Account"
}
);
}
public override string AreaName => "AccountArea";
}
public class FrontArea : AreaRegistration
{
public override void RegisterArea(AreaRegistrationContext context)
{
context.MapRoute(
"Front",
"{controller}/{action}/{id}",
new { controller = "Home", action = "Index", id = UrlParameter.Optional },
namespaces: new[] {
"Application.Controllers.Front"
}
);
}
public override string AreaName => "FrontArea";
}
和RouteConfig:
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
}
控制器
// on folder Controllers/Front/
namespace Application.Controllers.Front
class HomeController : Controller
{
ActionResult Index(){ ... }
}
// on folder Controllers/Account/
Application.Controllers.Account
class UserController : Controller
{
ActionResult Index(){...}
}
我更改了路由,因为我想将控制器分成 2 个子文件夹,即 Front 和 Account。
此配置允许我将应用程序分为两部分,使用 URL 地址进行区分。
localhost/Home/Index [namespace: Application.Controllers.Front]
localhost/Account/User/Index- [namespace: Application.Controllers.Account]
在浏览器中输入地址后
localhost/Home/Index - will start method Index from HomeController
localhost/Account/User/Index - will start method Index from UserController
在 URL 地址 localhost/Home/Index 上出现问题,我尝试呈现属于 localhost/Account/User/Index 的 URL 地址。
当我使用@Url.Action("Index","User") 时,地址将被呈现,但 URL 中没有“Account”前缀。
我收到:
/User/Index但是,我希望:
/Account/User/Index
反之亦然,在 localhost/Account/User/Index 上,我无法呈现属于 localhost/Home/Index 的正确 URL 地址。
这个问题我可以用Url.RouteUrllike解决
@Url.RouteUrl("Account", new {controller = "User", account = "Index"} )
但是,这需要路由名称,我不想提供。
【问题讨论】:
标签: asp.net-mvc routes url-routing asp.net-mvc-routing asp.net-mvc-areas