2016-01-09 2 views
0

я получил нулевое ссылочное исключение, когда я пытаюсь просмотреть данные из таблицы на самом деле зарегистрированного пользователя - Klient_has_sklep и если пользователь разве подписал с Sklep стола. Когда я просматриваю данные для пользователя, подписавшего с Sklep таблица все в порядке.ASP.net MVC LINQ пустой ссылка исключение

Я думаю, что проблема в контроллере с ViewModel

Это мой контроллер

public ActionResult Index(int? id) 
{ 
    var viewModel = new Klient_has_SklepIndexData(); 
    viewModel.Klients = db.Klients 

    .OrderBy(i => i.Nazwisko);   
    UserManager UM = new UserManager(); 
    int idZalogowanego = UM.GetUserID(User.Identity.Name); 
    ViewBag.idzal = idZalogowanego; 

    viewModel.Klient_has_Skleps = viewModel.Klients.Where(i => i.SYSUserID == idZalogowanego).Single().Klient_has_Sklep; 

    return View(viewModel); 
} 

Это мой взгляд

@model Sklepy.Models.ViewModel.Klient_has_SklepIndexData 

@{ 
ViewBag.Title = "Index"; 
Layout = "~/Views/Shared/_Layout.cshtml"; 
} 
<h2>@ViewBag.idzal.</h2> 
<h2>Twoje zniżki w sklepach</h2> 

<p> 
@Html.ActionLink("Create New", "Create") 
</p> 
<table class="table"> 
    <tr> 
     <th>asd</th> 
    </tr> 


@if (Model != null) 
{ 
    @foreach (var item in Model.Klient_has_Skleps) 
    { 
     <tr> 
      <td>@item.Znizka1</td> 

     </tr> 
    } 
} 
</table> 

Это моя модель

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.Threading.Tasks; 
using Sklepy.Models.DB; 

namespace Sklepy.Models.ViewModel 
{ 
    public class Klient_has_SklepIndexData 
    { 
      public IEnumerable<Klient> Klients { get; set; } 
      public IEnumerable<Klient_has_Sklep> Klient_has_Skleps {get; set;} 
    } 
} 

Klient код класса

public partial class Klient 
{ 
    [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2214:DoNotCallOverridableMethodsInConstructors")] 
    public Klient() 
    { 
     this.Klient_has_Sklep = new HashSet<Klient_has_Sklep>(); 
    } 

    public int KlientID { get; set; } 
    public int SYSUserID { get; set; } 
    public string Imię { get; set; } 
    public string Nazwisko { get; set; } 
    public string Adres { get; set; } 
    public string Telefon { get; set; } 
    public string Email { get; set; } 

    public virtual SYSUser SYSUser { get; set; } 
    [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2227:CollectionPropertiesShouldBeReadOnly")] 
    public virtual ICollection<Klient_has_Sklep> Klient_has_Sklep { get; set; } 
} 
+0

Где именно вы получаете пустое исключение? В действии или в представлении? – ramiramilu

+0

В контроллере в этой строке viewModel.Klient_has_Skleps = viewModel.Klients.Where (i => i.SYSUserID == idZalogowanego) .Single(). Klient_has_Sklep; – marylin17

ответ

1

Создайте свой ViewModel, как показано ниже. Я сделал модификацию для инициализации по умолчанию с List.

public class Klient_has_SklepIndexData 
{ 
    public IList<Klient> Klients { get; set; } 
    public IList<Klient_has_Sklep> Klient_has_Skleps { get; set; } 

    public Klient_has_SklepIndexData() 
    { 
     Klients = new List<Klient>(); 
     Klient_has_Skleps = new List<Klient_has_Sklep>(); 
    } 
} 

И ваш код действия.

public ActionResult Index(int? id) 
    { 
     var viewModel = new Klient_has_SklepIndexData(); 
     viewModel.Klients = db.Klients 
          .OrderBy(i => i.Nazwisko).ToList();   
     UserManager UM = new UserManager(); 
     int idZalogowanego = UM.GetUserID(User.Identity.Name); 
     ViewBag.idzal = idZalogowanego; 

     var skelp = viewModel.Klients.FirstOrDefault(i => i.SYSUserID == idZalogowanego); 

     if(skelp != null){ 
      if(skelp.Klient_has_Sklep != null){ 
       viewModel.Klient_has_Skleps = skelp.Klient_has_Sklep.ToList(); 
      } 
     } 

     return View(viewModel); 
    } 
+0

Я использовал метод копирования-вставки. Еще ошибка 'Невозможно преобразовать из 'System.Collections.Generic.ICollection ' в 'Sklepy.Models.DB.Klient_has_Sklep'' – marylin17

+0

У меня есть база данных сначала, поэтому она выглядит так: [ссылка ] (http://s12.postimg.org/l8gqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq.jpg) – marylin17

+0

И эта ошибка возврата строки: 'Только назначение, вызов, приращение, post, добавлен код класса Klient. – marylin17

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