System.Web.Mvc.WebViewPage <T>.Model.get вернул ноль - PullRequest
0 голосов
/ 05 июня 2018

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

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

System.NullReferenceException System.Web.Mvc.WebViewPage.Model.get вернул null.

Моя модель:

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 Ответ

0 голосов
/ 06 июня 2018

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

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"))
...