Передача данных из контроллера на страницу Razor, ошибка «Ссылка на объект не установлена ​​на экземпляр объекта» - PullRequest
1 голос
/ 09 июля 2020

Я пытаюсь показать некоторые данные на своей странице Razor, которые я получаю от своего контроллера, но получаю сообщение об ошибке 'Object reference not set to an instance of an object.' Вот как я получаю данные:

public async Task<IActionResult> Timeline(TimelineModel model)
        {    
            model.Timelineinfo = _context.Timelineinfo.FromSqlRaw($"SELECT * FROM `thin-blue-lie`.timelineinfo WHERE Date = '2020-07-07'").ToList();           
            ViewData["Timelineinfo"] = model.Timelineinfo;

            return View("Pages/Timeline.cshtml");
        }

Вот модель TimelineModel:

public class TimelineModel
    {
        public TimelineModel() {}
        public IList<Timelineinfo> Timelineinfo { get; set; } 
    }

Вот данные, которые он возвращает: enter image description here I am trying to move that data into my Page by putting the following at the top of my page and accessing it by doing @Event.City for example.

@{
    var Event = ViewData["Timelineinfo"] as ThinBlue.Timelineinfo; 
}

Однако я получаю ошибку ниже в строке var Event. Я получаю ту же ошибку, если не использую ViewData и пытаюсь получить доступ к материалам, выполнив Model.Timelineinfo[0].City Кто-нибудь знает, как я могу это исправить?

System.NullReferenceException: 'Ссылка на объект не установлена ​​на экземпляр объекта. '

Дополнительная информация: когда я устанавливаю точку останова в строке var Event, я получаю это , где обе стороны уравнения события равны нулю.

1 Ответ

1 голос
/ 09 июля 2020

Вы передаете List<Timelineinfo> для просмотра в действии, но на странице Razor отображается как Timelineinfo.

var Event = ViewData["Timelineinfo"] as List<ThinBlue.Timelineinfo>;
                                 //not cast as ThinBlue.Timelineinfo

Тестовые коды в контроллере и на странице Razor: ![enter image description here ![enter image description here

Screenshots of Test:
введите описание изображения здесь

В конце предлагаю изменить имена, чтобы не было путаницы.

public class TimelineModel
{
    public TimelineModel() {}
    public IList<Timelineinfo> Timelineinfos { get; set; } //not Timelineinfo
}

В контроллере

ViewData["Timelineinfos"] = model.Timelineinfos;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...