Исключение произошло в представлении - PullRequest
0 голосов
/ 24 апреля 2019

Я получаю исключение

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

в ASP.NET MVC, когда я публикую данные формы с более чем одниммодели.

Это мой класс ViewModel:

    public class CustomerViewModel
    {
        public Customer Customer { get; set; }
        public IEnumerable<tblGender> Genders  { get; set; }
        public IEnumerable<tblCountry> Countries { get; set; }
    }

Это метод действия Edit:

[HttpGet]
public ActionResult Edit(int id) 
{
            var customer = _context.Customers
.FirstOrDefault(c => c.Id == id);
            var viewModel = new CustomerViewModel()
            {
                Customer = customer,
                Genders = _context.tblGenders.ToList(),
                Countries = _context.tblCountries.ToList()
            };
            return View("Edit",viewModel);
}

[HttpPost]
public ActionResult Edit(Customer customer)
{
            var cust = _context.Customers.Single(c => c.Id == customer.Id);
            TryUpdateModel(cust);
            _context.SaveChanges();
            return RedirectToAction("Index", "Customer");
}

Create.cshtml:

Ошибка в этом разделе

   <div class="form-group">
          @Html.LabelFor(m => m.Customer.Gender)
        @Html.DropDownListFor(m => m.Customer.Gender, new    SelectList(Model.Genders, "Id", "GenderName"), "Select Gender", new { @class = "form-control" })
    </div>

Ответы [ 2 ]

2 голосов
/ 24 апреля 2019

В этом фрагменте кода ваша переменная customer может иметь значение null:

var customer = _context.Customers.FirstOrDefault(c => c.Id == id);

В этом фрагменте кода вы присваиваете эту переменную своей модели. Клиент:

var viewModel = new CustomerViewModel()
            {
                Customer = customer,

В этом фрагменте кода вы используете модель. Клиент, как будто вы уверены, что он не равен нулю:

@Html.LabelFor(m => m.Customer.Gender)

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

var viewModel = new CustomerViewModel()
            {
                Customer = customer ?? new Customer(),

или это:

var customer = _context.Customers.FirstOrDefault(c => c.Id == id);
if (customer == null) {
  return view("CustomerNotFound"); //or some other way to display your error
}
0 голосов
/ 24 апреля 2019

Относительно исключения ссылки на объект.Вы создали экземпляры объектов, которые вы используете?например:

private readonly CustomerViewModel _customerViewModel;
_customerViewModel = new CustomerViewModel();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...