我尝试使用少量相关表格在我的视图信息中显示。我想展示来自&uzztkownik'的商品。选择“przedmioty'数据。 我有模特:
'przedmioty' ['idPrzedmiot']
'rolaPowWykladowca' ['idRolaPowWykladowca', 'idUzytkownik', 'idPrzedmiot', (...)]
'uzytkownik' ['idUzytkownik',(...)]
我创建了ViewModel:
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);
}
错误是:
无法隐式转换类型&#39; Aplikacja.Models.uzytkownik&#39;到&#39; System.Collections.Generic.IEnumerable&lt; Aplikacja.Models.uzytkownik&gt;&#39;。存在显式转换(您是否错过了演员?)
我也试过这种方式:
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(在u.idUzytkownik中)在curent上下文中不存在
我认为好的方式或我的想法总体上是错误的?
--- --- EDIT
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;
}
我做了类似的事情,但仍有错误:
错误CS1061&#39;列表&#39;不包含&#39; uzytkownik&#39;的定义没有扩展方法&#39; uzytkownik&#39;接受类型&#39; List&#39;的第一个参数。可以找到(你错过了使用指令或程序集引用吗?)
- 编辑 -
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>
}
}
没有错误,但它不起作用 - 我的意思是在选择&#39; przedmioty&#39;之后。视图不显示来自&u; | uzytkownik&#39;(idPrzedmiot在选择后显示)的记录。知道它为什么不起作用吗?
答案 0 :(得分:0)
我看到两个可能的错误原因。 Uzytkownik属性的类型为'Aplikacja.Models.uzytkownik',或者您的模型声明属于'Aplikacja.Models.uzytkownik'类型。只需查看异常堆栈跟踪了解更多详细信息。
答案 1 :(得分: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>
希望如果有人遇到类似问题会有所帮助:)