C# MVC5 路由默认路由和区域路由,无需在路由值中添加“区域”

问题描述 投票:0回答:1

我无法使用两个路由规则来保持工作

Url.Action("action", "Controller")
,无需在链接中添加
new { Area = "" }

这可能吗? 请帮忙。

c# routes asp.net-mvc-5 area
1个回答
0
投票

-> 是的,这是可能的。我们可以在使用“Url.Action”生成 URL 时在路由值中使用区域

-> 在 RouteConfig.cs 文件中定义默认路由 :-

public class RouteConfig
{
    public static void RegisterRoutes(RouteCollection routes)
    {
        routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

        routes.MapRoute(
            name: "Default",
            url: "{controller}/{action}/{id}",
            defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
        );
    }
}

-> 定义特定于区域的路由 :- 在该区域的 AreaRegistration 类中定义每个区域的路由,例如:-

public class MyAreaRegistration : AreaRegistration 
{
    public override string AreaName 
    {
        get 
        {
            return "MyArea";
        }
    }

    public override void RegisterArea(AreaRegistrationContext context) 
    {
        context.MapRoute(
            name: "MyArea_default",
            url: "MyArea/{controller}/{action}/{id}",
            defaults: new { action = "Index", id = UrlParameter.Optional }
        );
    }
}

-> 不指定区域生成 URL :- 现在,当您使用 Url.Action 在默认区域内为控制器/操作生成 URL 时。这将生成 URL :- /Home/Index

<a href="@Url.Action("Index", "Home")">Home</a>

-> 为区域中的 Actionio 生成 URL :- 要为区域内的操作生成 Ul,指定区域名称。和 URL :- /MyArea/SomeController/Index

<a href="@Url.Action("Index", "SomeController", new { area = "MyArea" })">Some Action</a>

-> 遵循此代码,您可以维护默认和特定于区域的控制器/操作的路由,而无需在为默认控制器/操作生成 URL 时显式指定区域。

© www.soinside.com 2019 - 2024. All rights reserved.