2016-12-02 67 views
0

我嘗試在我的視圖信息中顯示幾個相關的表。我想從'przymioty'數據中選擇後顯示來自'uzytkownik'的項目。 我有型號:控制器與相關數據 - 實體框架

'przedmioty' ['idPrzedmiot'] 
'rolaPowWykladowca' ['idRolaPowWykladowca', 'idUzytkownik', 'idPrzedmiot', (...)] 
'uzytkownik' ['idUzytkownik',(...)] 

我試圖做我的控制器作爲導師控制器這裏https://www.asp.net/mvc/overview/older-versions/getting-started-with-ef-5-using-mvc-4/reading-related-data-with-the-entity-framework-in-an-asp-net-mvc-application

我創建視圖模型:

public class PrzedmiotViewModel 
{ 
    public IEnumerable<przedmioty> Przedmioty { get; set; } 
    public IEnumerable<przedmiotPowWykladowca> PrzedmiotPowWykladowca { get; set; } 
    public IEnumerable<uzytkownik> Uzytkownik { get; set; } 
} 

現在我的控制器看起來像:

public ActionResult Index(int? PrzedmiotID, int? UzytkownikID, int? FormaZajecId) 
    { 
     var viewModel = new PrzedmiotViewModel(); 
     viewModel.Przedmioty = db.przedmioty; 

     if (UzytkownikID != null) 
     { 
      ViewBag.idUzytkownik = UzytkownikID.Value; 
      viewModel.Uzytkownik = viewModel.PrzedmiotPowWykladowca 
       .Where(x => x.idUzytkownik == UzytkownikID).SingleOrDefault().uzytkownik; 
     } 

     return View(viewModel); 
    } 

錯誤是:

Cannot imlicitly convert type 'Aplikacja.Models.uzytkownik' to 'System.Collections.Generic.IEnumerable<Aplikacja.Models.uzytkownik>'. An explicit conversion exist (are you missing a cast?)

我也試過這樣:

 if (PrzedmiotID != null) 
     { 
      ViewBag.idPrzedmiot = PrzedmiotID.Value; 

      viewModel.Uzytkownik = (from p in viewModel.Przedmioty 
            where p.idPrzedmiot == PrzedmiotID 
            select new 
            { 
             przedmioty = p, 
             przedmiotPowWykladowca = (from pw in p.przedmiotPowWykladowca 
                    where pw.idPrzedmiot == PrzedmiotID 
                    select new 
                    { 
                     przedmiotPowWykladowca = pw, 
                     uzytkownik = from u in pw.idUzytkownik == u.idUzytkownik 
                        select u 
                    }) 
            }).Single().uzytkownik; 
     } 

u (in u.idUzytkownik) does not exist in the curent context

我覺得好辦法或者我的想法是一般錯了嗎?

---編輯---

 if (PrzedmiotID != null) 
     { 
      ViewBag.idPrzedmiot = PrzedmiotID.Value; 
      var selectedPrzedmiotPowWykladowca = viewModel.PrzedmiotPowWykladowca 
      .Where(x => x.idPrzedmiot == PrzedmiotID).ToList(); 

      db.Entry(selectedPrzedmiotPowWykladowca).Collection(x => x.uzytkownik).Load(); 
      foreach (uzytkownik uzytkownik in selectedPrzedmiotPowWykladowca.uzytkownik) 
      { 
       db.Entry(uzytkownik).Reference(x => x.rola).Load(); 
      } 

      viewModel.Uzytkownik = selectedPrzedmiotPowWykladowca.uzytkownik; 
     } 

我做了這樣的事情,但還是有一個錯誤:

Error CS1061 'List' does not contain a definition for 'uzytkownik' and no extension method 'uzytkownik' accepting a first argument of type 'List' could be found (are you missing a using directive or an assembly reference?)

- 編輯 -

 if (PrzedmiotID != null) 
     { 
      ViewBag.idPrzedmiot = PrzedmiotID.Value; 

      var viewUzytkownik = new PrzedmiotViewModel(); 
      viewUzytkownik.PrzedmiotPowWykladowca = db.przedmiotPowWykladowca.Where(x => x.idPrzedmiot == PrzedmiotID) 
       .Include(x => x.uzytkownik); 

      return View(viewUzytkownik); 

而且這是對這部分的看法:

@foreach (var przedmioty in Model.Przedmioty) 
{ 
    @foreach (var uzytkownik in Model.Uzytkownik) 
    { 
     string selectedRow = ""; 
     if (przedmioty.idPrzedmiot == ViewBag.idPrzedmiot) 
     { 
      selectedRow = "selectedrow"; 
     } 
     <tr clss="@selectedRow"> 
      <td> 
       @Html.ActionLink("Wybierz", "Index", new { idUzytkownik = uzytkownik.idUzytkownik }) 
      </td> 
      <td> 
       @uzytkownik.imie 
      </td> 
      <td> 
       @uzytkownik.nazwisko 
      </td> 
     </tr> 
    } 
} 

沒有錯誤,但它不起作用 - 我的意思是在選擇'przedmioty'視圖沒有顯示來自'uzytkownik'的記錄後(我選擇idPrzedmiot後再選擇)。任何想法爲什麼它不起作用?

+1

你的U虛擬機上的zytkownik屬性是一個集合,並且在您的控制器中,您將它設置爲SingleorDefault?那是什麼錯 – Jinish

回答

0

我做LINQ查詢像有:

public ActionResult Details(int? PrzedmiotID) 
    { 
     if (PrzedmiotID == null) 
     { 
      return new HttpStatusCodeResult(HttpStatusCode.BadRequest); 
     } 

     var wykladowcy = from p in db.przedmioty 
         join ppw in db.przedmiotPowWykladowca on p.idPrzedmiot equals ppw.idPrzedmiot 
         join f in db.formaZajec on ppw.idFormaZajec equals f.idFormaZajec 
         join u in db.uzytkownik on ppw.idUzytkownik equals u.idUzytkownik        
         where ppw.idPrzedmiot == PrzedmiotID.Value 
         select new PrzedmiotViewModel { Przedmioty = p, PrzedmiotPowWykladowca = ppw, Uzytkownik = u, FormaZajec = f}; 
     if (wykladowcy == null) 
     { 
      return HttpNotFound(); 
     } 
     return View(wykladowcy); 
    } 

我改變視圖模型到這一點:

public class PrzedmiotViewModel 
{ 
    public przedmioty Przedmioty { get; set; } 
    public przedmiotPowWykladowca PrzedmiotPowWykladowca { get; set; } 
    public uzytkownik Uzytkownik { get; set; } 
    public formaZajec FormaZajec { get; set; } 
} 

並在視圖我補充一下:

@model IEnumerable<Aplikacja.ViewModels.PrzedmiotViewModel> 

希望,如果任何人有得到類似的問題,它會幫助:)

0

我看到兩個可能的錯誤原因。 Uzytkownik屬性的類型爲'Aplikacja.Models.uzytkownik',或者您的模型聲明爲'Aplikacja.Models.uzytkownik'類型。請查看異常堆棧跟蹤以獲取更多詳細信息。

+0

仍然有一個錯誤,我試圖修復它,如你所說,但我無法做到這一點。 – Katniss

+0

你可以粘貼旅遊視圖中的代碼嗎? –

+0

我改變了控制器的代碼,在我看來應該工作(我編輯的問題),如果你可以看看它,我會感激 – Katniss