ViewContext.RouteData.Values ​​[Контроллер] всегда Null - Asp.Net Core 2.1

Я начал со стандартного шаблона веб-приложения ASP.NET Core, используя Asp.Net Core 2.1 в качестве отправной точки.

Затем я добавил левую панель навигации в общую папку, например: ActiveRouteTagHelper

На этой панели навигации я хочу выделить активную ссылку и использовал следующее решение: ActiveRouteTagHelper Бена Калла для MVC.

А потом я столкнулся со следующей проблемой:

Когда я нажимаю кнопку отладки и приложение запускается, я ожидаю увидеть значение контроллера в ViewContext.RouteData.Values["Controller"].

Для первого и каждого второго щелчка, даже если можно увидеть, что URL отображает правильное действие и имя контроллера

    private bool ShouldBeActive()
    {
        try
        {
            var currentController = ViewContext.RouteData.Values["Controller"].ToString();
            var currentAction = ViewContext.RouteData.Values["Action"].ToString();


        }
        catch (Exception ex)
        {
            return false;
        }
    }

Я удалил остальную часть метода для ясности.

Мой Startup Класс:

        public void ConfigureServices(IServiceCollection services)
    {
        services.Configure<AppSettings>(_configuration);
        services.Configure<AppSettings>(_configuration.GetSection("PortalSettings"));
        var settings = _configuration.Get<AppSettings>();

        services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_1);
        services.AddMvc();
        services.AddMvc().AddControllersAsServices();
        services.TryAddSingleton<IHttpContextAccessor, HttpContextAccessor>();
    }

    public void Configure(IApplicationBuilder app, IHostingEnvironment env)
    {
        if (env.IsDevelopment())
        {
            // If this is the case then enable more detailed error output
            app.UseDeveloperExceptionPage();

            // Display a more specific error page when an exception occurs connecting to the database
            app.UseDatabaseErrorPage();
        }
        else
        {
            // If this is not the case then forward the error to our generic view
            app.UseExceptionHandler("/Shared/Error");
            app.UseHsts();
        }

        app.UseHttpsRedirection();
        app.UseStaticFiles();

        app.UseMvc(routes =>
        {
            routes.MapRoute("default", "{controller}/{action}/{id?}");
        });
        app.UseAuthentication();
    }

Мой вопрос в том, как мне получить, что эти две строки возвращают значение? Как бы то ни было, то, что я пробовал, оказалось успешным. Результат всегда нулевой !!

var currentController = ViewContext.RouteData.Values["Controller"].ToString();
var currentAction = ViewContext.RouteData.Values["Action"].ToString();

Просмотр отладки

Я пробовал различные варианты отображения маршрутизации, но безрезультатно. Любые идеи?


person user3797538    schedule 12.11.2018    source источник


Ответы (2)


Вы путаете Razor Pages и MVC. Шаблон веб-приложения по умолчанию для ASP.NET Core предоставляет вам приложение Razor Pages (https://www.learnrazorpages.com), и, судя по размещенным вами изображениям, это то, что у вас есть.

Маршрутизация в Razor Pages определяется в соответствии с путями к файлам содержимого в папке Pages, а не контроллерами и методами действий. Если вам нужно приложение MVC, выберите Веб-приложение ASP.NET Core в качестве типа проекта, затем выберите Веб-приложение (Модель-Представление-Контроллер).

person Mike Brind    schedule 12.11.2018
comment
спасибо Майк, вы правы, я пытаюсь изучить основные бритвенные страницы ASP.NET, а не MVC. Я все еще хотел бы выделить пункт меню, я еще немного почитаю, просто все очень запутанно на данный момент - person user3797538; 13.11.2018

Я не знаю, правильный ли это способ сделать это или нет, но я нашел это сообщение в блоге, в котором показано, как заставить этот помощник тега работать с Razor Pages.

person Mike B    schedule 13.11.2018
comment
Извините, не могли бы вы подробнее объяснить, почему, по вашему мнению, эта ссылка отвечает на вопрос? Я вообще не считаю их одной и той же проблемой. Может я что-то упускаю. - person Chaim Eliyah; 28.11.2018