Область не передается Url.Action () в ASP.net Core - PullRequest
0 голосов
/ 04 ноября 2018

Следующий код работает в обычном ASP.net MVC.

Url.Action("actionName", "controllerName", new { Area = "areaName" });

Но это не очень хорошо работает в ASP.net Core. Область распознается как параметр строки запроса.

Как я могу решить это? Спасибо за любую помощь.

1 Ответ

0 голосов
/ 05 ноября 2018

Убедитесь, что вы регистрируете маршруты, как показано ниже:

app.UseMvc(routes =>
{
    routes.MapRoute(
        name: "areaRoute",
        // if you don't have such an area named as `areaName` already, 
        //    don't make the part of `{area}` optional by `{area:exists}`
        template: "{area}/{controller=Home}/{action=Index}");  

    routes.MapRoute(
        name: "default",
        template: "{controller=Home}/{action=Index}/{id?}");
});

Я мог бы воспроизвести ту же проблему, что и ваша, изменив порядок маршрутов или изменив значение {area} на необязательное.

  1. Порядок имеет значение . areaRoute должен стоять первым. Не меняйте порядок.
  2. При создании url для области, , если у вас еще нет такой области, не меняйте часть {area} на необязательную на {area:exists}. Например, предположим, что вы пытаетесь сгенерировать URL в область MyAreaName:

    Url.Action("actionName", "controllerName", new { Area = "MyAreaName" });
    

    Если в вашем проекте нет области с именем MyAreaName, и вы сделали область optional с помощью:

    routes.MapRoute(
        name: "areaRoute",
        template: "{area:exists}/{controller=Home}/{action=Index}");
    

    сгенерированный URL будет controllerName/actionName?Area=MyAreaName.

...