Как использовать пользовательскую модель в MVC - PullRequest
0 голосов
/ 21 сентября 2018

Я создал пользовательскую модель в MVC, где я передаю элемент из 3 таблиц в виде списка.и в представлении я выбираю эти детали.Но в View я получаю Object reference not set to an instance of an object. Я новичок в MVC, может кто-нибудь помочь мне, пожалуйста.Я не знаю, где я делаю не так!

Мой контроллер MVC:

public ActionResult Index()
{
   var adminModel = new AdminModel();
   return View(adminModel);
}

Код моей пользовательской модели:

public class AdminModel
{
    public List<Notification> Notifications { get; set; }            
    public List<Places> Places { get; set; }
}

Код моего просмотра:

@model TravelFly.Models.AdminModel
@{
    ViewBag.Title = "Admin Dashboard";
    Layout = "~/Views/Shared/_AdminPartial.cshtml";
}
<p class="text-danger">@Model.Notifications.Count</p>
... some other contents...

Обновление: код контроллера:

public ActionResult Index()
        {
            var adminModel = new AdminModel();
            return View(adminModel);
        }

Файл класса:

публичные уведомления списка {get;задавать;} = новый список ();общедоступный список мест {get;задавать;} = новый список ();

Ответы [ 4 ]

0 голосов
/ 21 сентября 2018

На самом деле я не передавал данные в элемент списка, созданный в пользовательской модели.Таким образом, новый код контроллера будет:

public ActionResult Index()
        {
            var adminModel = new AdminModel {

                Notifications = db.Notifications.ToList(),
                Places = db.Places.ToList()

            };
            return View(adminModel);
        }

и файл класса пользовательской модели:

 public class AdminModel
    {

        public List<Notification> Notifications { get; set; } = new List<Notification>();
        public List<Places> Places { get; set; } = new List<Places>();
    }
0 голосов
/ 21 сентября 2018

Notifications не имеет значения по умолчанию в вашем классе AdminModel, поэтому, когда вы отправляете новый объект adminModel в ваше представление, это свойство равно null, и вы не можете вызвать .Count

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

public class AdminModel
    {
        public List<Notification> Notifications { get; set; } = new List<Notification>()            
        public List<Places> Places { get; set; }
    }

Если вы не хотите изменять это в своем классе, вы можете установить его значение перед отправкой в ​​представление:

public ActionResult Index()
{
   var adminModel = new AdminModel();
   adminModel.Notifications = new List<Notification>();
   return View(adminModel);
}
0 голосов
/ 21 сентября 2018

Вам, вероятно, следует инициализировать коллекции на вашей модели или тесте, если в представлении нет значения.

var adminModel = new AdminModel
{
   Notifications = new List<Notification>(),
   Places = new List<Places>()
};

ИЛИ

@if(Model.Notifications !=null)
{
   <p class="text-danger">@Model.Notifications.Count</p>
}

ИЛИ

public class AdminModel
{
    public List<Notification> Notifications { get; set; }            
    public List<Places> Places { get; set; }

   public AdminModel()
   {
      Notifications = new List<Notification>();
      Places = new List<Places>();
   }
}
0 голосов
/ 21 сентября 2018

Ваша модель не заполняется до того, как вы передадите ее в представление.Вам нужно позвонить примерно так:

public ActionResult Index()
{
    var adminModel = new AdminModel();

    adminModel.Notifications = new List<Notifications>();
    // Create a new notification [yourCreatedNotification]... then add it to the list
    adminModel.Notifications.Add(yourCreatedNotification);

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