/ / ASP.NET MVC: Vincule sempre automaticamente a uma área padrão, a menos que uma área seja especificada - asp.net-mvc, asp.net-mvc-routing, asp.net-mvc-areas

ASP.NET MVC: Vincule sempre automaticamente a uma área padrão, a menos que uma área seja especificada - asp.net-mvc, asp.net-mvc-routing, asp.net-mvc-areas

Eu tenho um aplicativo existente que não tem áreas. No entanto, estou adicionando uma seção totalmente nova, então criei uma área. Então eu tenho uma área e a área padrão.

Então, por exemplo:

Rota padrão = / Invoice / Create

Rota de área = / TAE / Port / Create

Esses dois links funcionam. No entanto, quando eu navego para a seção da área TAE, todos os links mudam para dentro dessa área da TAE. Por exemplo, TAE / fatura / criar

Eu posso forçá-los a não ter nenhuma área adicionando novos {area = ""} ao link de ação, mas isso envolve a modificação de todos os links no aplicativo.

É possível ter um link de ação sem área especificada sempre ir para a área padrão, independentemente da área em que a página atual está?

global.asax.cs

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

routes.MapRoute(
"Default",                                              // Route name
"{controller}/{action}/{id}",                           // URL with parameters
new { area="", controller = "Home", action = "Index", id = "" }, // Parameter defaults
new string[] { "BankingDB.Controllers" } //namespaces
);

}

TAEAreaRegistration.cs

    public override void RegisterArea(AreaRegistrationContext context)
{
context.MapRoute(
"TAE_default",
"TAE/{controller}/{action}/{id}",
new { action = "Index", id = UrlParameter.Optional }
);
}

Link para a área TAE:

<%= Html.ActionLink("Create", "Create", "Port" , new { area = "TAE"}, new {}) %>

Link de área normal:

<%= Html.ActionLink("Create", "Create", "Invoice") %>

Respostas:

0 para resposta № 1

Editar: Eu recomendo que, se você for usar uma área em qualquer lugar, você deve torná-los todos em áreas.

Caso contrário, você pode sobrescrever a extensão com essa assinatura e tornar um padrão para a área = "" então você nunca precisará escrevê-la: D Este é um link para o que você deseja sobrescrever; D

Edição Extra: Só para ter certeza que você entendeu a estrada que eu te dei. você pode facilmente fazer uma nova extensão que chamaria essa função com a área de parâmetro em branco já preenchida. ou sempre sobrescrever lol boa sorte