Получить значение из контроллера проекта, на который имеется ссылка, в главный контроллер проекта

У меня много приложений ASP.NET MVC с одинаковым кодом для заголовков, поэтому я создал отдельный общий проект ASP.NET MVC для заголовка. Я загружаю данные из хранимой процедуры в модель, чтобы заполнить меню в заголовке, установил RazorGenerator для компиляции представлений и ссылки на dll в моих индивидуальных приложениях. Работает отлично.

Есть некоторые данные из хранимой процедуры, которая получает некоторые значения для меню заголовков, которые я хотел бы иметь в своих приложениях-потребителях. Можно ли каким-то образом получить эти значения из моих потребляющих проектов ASP.NET MVC? Это кажется невозможным. Было бы неплохо, если бы я мог просто каким-то образом получить его из указанной DLL, чтобы мне не приходилось делать второй избыточный вызов. Я пробовал следующее, и ничего не работает:

  • В общих настройках проекта переменные Session или Tempdata. Они не попадают в потребляющие проекты. Значения равны нулю
  • Я не могу создать экземпляр нового класса, например

    ReferencedNamespace.modelrow bla = new ReferencedNamespace.modelrow();
    

    Технически это единственный способ вернуть значения, но это, по сути, делает два вызова БД через модель проекта, на который указывает ссылка, так что это противоречит цели.

  • В классе упомянутых проектов я попытался создать свойство:

    public string myvalue
    {
        get
        {
            return valuetoget;
        }
    }
    

    и в контроллере, который изначально заполняет модель, я добавляю

    valuetoget = whatever comes back from the stored procedure here
    

Но нет возможности сослаться на referenceNamespace.Controllers.Controllername.valuetopass. Я снова могу создать его экземпляр из проекта-потребителя, и он снова вызывает его дважды. Так что бесполезно.

Можно ли каким-либо образом передать эти данные из контроллера DLL, на который имеется ссылка, потребляющим приложениям? Как я уже сказал, я действительно не хочу разбивать мою исходную хранимую процедуру заголовка на две хранимые процедуры или выполнять избыточные вызовы.

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
0
38
1

Ответы 1

В итоге я использовал сеансы. Первоначально я установил значения сеанса в методе действия контроллера, но проблема в том, что когда я проверял данные сеанса в действиях контроллера своих основных проектов, значения были нулевыми, что приводило к ошибкам при проверке информации профиля пользователя внутри моих представлений. Поэтому я просто предположил, что библиотеки классов в ссылочных библиотеках могут читать переменные сеанса потребляющего приложения, но не мог их установить.

Я ошибался. ты может.

По сути, когда я добавляю свое представление заголовка (которое поступает из указанной библиотеки) в код Razor, код для этого представления заголовка в указанном проекте не выполняется до тех пор, пока ПОСЛЕ того, как весь код действия потребляющего проекта не будет вызван для текущего представления и вернулся ... так что по сути я пытаюсь получить поля сеанса до того, как они появятся. Вот почему они были нулевыми.

Вы ДУМАЕТЕ, что ВТОРОЙ раз, когда я запустил страницу (выполняя обновление), ЗАТЕМ поля сеанса будут там, потому что указанный метод действия загрузил бы их, но они все еще были пустыми. Я до сих пор не знаю почему, и я хотел бы понять это ... НО я в основном просто успешно сделал это:

Я установил контроллеры моего потребляющего проекта на наследование от настраиваемого класса. Затем внутри переопределенного метода OnActionExecuting () этого настраиваемого класса ... я проверяю, являются ли мои поля сеанса нулевыми. Если это так, то это (вероятно) первый раз, когда мы запускаем это, поэтому я ЗАТЕМ создаю новый экземпляр моего ссылочного контроллера. Я беру этот экземпляр и вызываю метод действия для заголовка. Это вызовет «начальную загрузку» данных сеанса до того, как какие-либо контроллеры в любом проекте (упомянутом или потребляющем) попытаются запустить ЛЮБОЙ код действия. Это гарантирует, что когда любой контроллер попытается сослаться на эти поля сеанса, они будут там.

Технически это приводит к тому, что мой sproc запускается дважды при загрузке заголовка, но ТОЛЬКО при первой загрузке страницы или если что-то очищает сеанс, что меня устраивает.

Я читал, что сеансы - это плохой способ пересылки данных между классами, НО в этом случае это информация профиля пользователя, которую я в любом случае хотел загрузить в переменные сеанса, поэтому в моем случае это работает. Если бы это были данные любого другого типа, у меня были бы проблемы.

Другие вопросы по теме