2015-02-19 4 views
0

Я новичок в asp.net mvc, и я делаю это упражнение для себя. Я создал edmx из базы данных Northwind. я создал контроллер:NullReferenceException был необработанным основанием сущности asp.net

public ActionResult Index(int id) 
    { 
     var model = new IndexViewModel(); 
     using (var db = new ProductDB()) 
     { 
      model.Products = from p in db.Products 
          orderby p.ProductName 

          select new IndexViewModel.InfoProduct 
          { 
           ProductName = p.ProductName, 
           QuantityPerUnit = p.QuantityPerUnit, 
           UnitPrice = p.UnitPrice 
          }; 
     } 
     return View(); 
    } 

... вид:

@model aspTest.Models.IndexViewModel 
@{ 
    Layout = null; 
} 

... 

    <div> <ul> 
     @foreach (var p in Model.Products){ 
    <li>@p.ProductName</li> 
} 
     </ul> 
    </div> 

... и ViewModel:

public class IndexViewModel 
{ 
    public IEnumerable<InfoProduct> Products { get; set; } 

    public class InfoProduct 
    {    
     public string ProductName { get; set; } 
    } 

} 

Но эта ошибка продолжает появляться в этой части: @foreach (var p in Model.Products) {

  • @ p.ProductName
  • Извините, я знаю, что это может быть noobish для большинства из вас.

    ответ

    5

    Вы объявляете в вашей модели, что он будет работать с IndexViewModel класса как:

    @model aspTest.Models.IndexViewModel 
    

    но вы не отправляете ничего Вид из контроллера, как:

    return View(); 
    

    Попробуйте использовать:

    return View(model); 
    

    Ошибка верна, вы пытаетесь выполнить итерацию по свойствам (Товары) объекта (IndexViewModel), который вы не предоставляете.

    +0

    Это было быстро! Благодаря! Но теперь появилась другая ошибка в той же строке ... Исключение типа «System.ObjectDisposedException» произошло в EntityFramework.dll, но не было обработано в коде пользователя Дополнительная информация: экземпляр ObjectContext был удален и больше не может использоваться для операций, требующих подключения. – Caloyski

    +0

    Не могли бы вы попытаться поставить return View (model); в рамках использования? – user3021830

    +0

    Я только что сделал, такая же ошибка появляется. – Caloyski

    0

    Помимо того, что вы не возвращаете ViewModel к вашему мнению и крикнуть использовать return View(model); есть что-то еще тусклый с кодом:

    public class InfoProduct 
    {    
        public string ProductName { get; set; } 
    } 
    

    Ваш класс Infoproduct содержит только ProductName, но вы также назначить Количество и Ценовое свойство в вашем предложении select, это не будет компилироваться.

    model.Products = from p in db.Products 
           orderby p.ProductName 
           select new IndexViewModel.InfoProduct 
           { 
             ProductName = p.ProductName, 
           }; 
    

    Наконец, материализовать свои данные с помощью .ToList()

    public ActionResult Index(int id) 
    { 
        var model = new IndexViewModel(); 
        using (var db = new ProductDB()) 
        { 
         model.Products = (from p in db.Products 
             orderby p.ProductName 
             select new IndexViewModel.InfoProduct 
             { 
              ProductName = p.ProductName, 
             }).ToList(); 
         return View(model); 
        } 
    
    } 
    
    +0

    Спасибо, помощник! Хорошего дня! – Caloyski

    Смежные вопросы