System.Web.Mvc.WebViewPage < T > .Model.get возвращен null

Mizzt спросил: 12 мая 2018 в 03:47 в: c#

Я пытаюсь создать свое первое приложение ASP.NET MVC, но с двух дней я не могу решить свою проблему.

Я использую подход Entity Framework Code First. Я хочу создать DropDownListFor, но всегда есть эта ошибка:

System.NullReferenceExceptionSystem.Web.Mvc.WebViewPage.Model.get возвратил null.

My Модель:

public class Animals
    {
        public int AnimalsId { get; set; }
        public int ClientsId { get; set; }
        public string Name { get; set; }
        public int TypesId { get; set; }
        public float Age { get; set; }
        public float Weight { get; set; }        public virtual Types Types { get; set; }
        public IEnumerable<Clients> ClientsList { get; set; }
        public virtual ICollection<BookVisit> AnimalsVisits { get; set; }
    }

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

public ActionResult Create([Bind(Include = "AnimalsId, ClientsId, Name, TypesId, Age, Weight")] Animals animals)
        {
            var person = new List<Clients>
            {
                new Clients { ClientsId = 50, Name = "Timo", Surname = "Werner", Email = "timo.werner@gmail.com", Phone = 123123123 }
            };            var animalsView = new Animals
            {
                ClientsList = person.Select(x => new Clients
                {
                    ClientsId = x.ClientsId
                })
            };            if (ModelState.IsValid)
            {
                db.Animals.Add(animals);
                db.SaveChanges();
                return RedirectToAction("List", "Animal");
            }            return View(animalsView);
        }

Мой просмотр (только @model и выпадающее меню):

@model xyz.Models.Animals    
@Html.DropDownListFor(model => model.ClientsId, new SelectList(Model.ClientsList, "ClientsId", "Name", "Surname", "Email", "Phone"))

Не могли бы вы взглянуть?

1 ответ

Shyju ответил: 12 мая 2018 в 08:04

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

public ActionResult Create()
{
     var clients = new List<Clients>
     {
           new Clients { ClientsId = 50, Name = "Timo" },
           new Clients { ClientsId = 51, Name = "Microsoft" }
     };     var vm = new Animals
     {
         ClientsList = clients
     };
     return View(vm);
}

Также ваш текущий код, который вызывает DropDownListFor неправильно. Когда вы создаете SelectList из коллекции, вы должны передать поля dataValue и dataText.

@model Animals
@Html.DropDownListFor(model => model.ClientsId,
                              new SelectList(Model.ClientsList, "ClientsId", "Name"))