Получить значение из ссылочного контроллера проекта в основной контроллер проекта - PullRequest
0 голосов
/ 14 декабря 2018

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

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

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

    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 в приложения-потребители?Как я уже сказал, я действительно не хочу разбивать свою исходную хранимую процедуру заголовка на две хранимые процедуры или делать избыточные вызовы.

1 Ответ

0 голосов
/ 14 декабря 2018

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

Я был не прав.вы можете .

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

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

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...