2016-12-02 71 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