bahman.01 Ответов: 1

В MVC почему я не могу добавить значение в сеанс контроллера?


В этом коде:
CardexController controller = new CardexController();
controller.Session.Add("cmstr", id);
controller.Index();

Я сталкиваюсь с Системы.Исключение NullReferenceException ошибка на линии:
controller.Session.Add("cmstr", id);


Что я должен делать, пока id имеет значение и он не пуст?

Что я уже пробовал:

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

1 Ответов

Рейтинг:
4

phil.o

Session собственность вас CardexController экземпляр, несомненно, равен нулю.
Пришло время поставить точку останова на линии, которая инициализирует контроллер, и нажать клавишу F5.

Тот факт, что свойство Session ожидает некоторого экземпляра объекта, реализующего данный интерфейс (я просто экстраполирую из того, что вы написали, так как у меня нет формального определения класса), не означает, что вы не должны предоставлять ему действительный экземпляр.


bahman.01

Я не могу понять, что вы подразумеваете под "свойством сеанса", ожидающим некоторого экземпляра объекта, реализующего данный интерфейс"

phil.o

С какой частью предложения у вас возникли проблемы?

bahman.01

Вот реальный код в первом контроллере:
public void checkItem(string id)
{
if (Session ["cmstr"] = = null)
Сессия.Добавить ("cmstr", id);
ещё
Сеанс ["cmstr"] = id;

Cardexcontroller controller = новый CardexController();
контроллер.cmstr = идентификатор;
контроллер.Сессия.Добавить ("cmstr", id);
контроллер.Индекс();
}

и это код во втором контроллере под названием " CardexController" :
индекс public ActionResult()
{
var item = Session ["cmstr"];
if (item = = null)
return PartialView ("~/Views/RcvAccount/RcvAccountCustomer/_RcvAccountCustomerPartial.cshtml");
ещё
return PartialView ("~/Views/RcvAccount/RcvAccountCardex/_RcvAccountCardexPartial.cshtml");
}

Что я должен написать в приведенной ниже функции?
публичный CardexController()
{

}

phil.o

Пожалуйста, избегайте кода в комментариях; это вряд ли читается. Вместо этого вы должны использовать зеленую кнопку "улучшить вопрос" и поместить туда код с правильным форматированием.
Из того, что я вижу, проблема может заключаться в том, что вы создаете новый CardexController в checkItem метод. Поскольку вы назначаете его локальной переменной, эта переменная становится нулевой в конце метода. Таким образом, в основном ваш код просто создает новый CardexController каждый раз, когда выполняется метод, выбрасывая его в конце.
Возможно ли, что у вас уже есть экземпляр CardexController где-то в другом месте, который вы должны использовать вместо него?
И public CardexController() { ... } это не объявление функции, это определение класса. Я не знаю, вызвана ли эта ошибка плохой формулировкой или неполным знанием. У меня такое чувство, что есть некоторые ключевые понятия ООП-программирования в целом и MVC в частности, которые вам еще предстоит изучить и понять.