Asp.net mvc 将相关实体传递给视图
我有实体“Reserve”、“reservesuser”和默认的“ApplicationUser”Asp.net mvc 将相关实体传递给视图,asp.net-mvc,entity-framework,entity-framework-core,Asp.net Mvc,Entity Framework,Entity Framework Core,我有实体“Reserve”、“reservesuser”和默认的“ApplicationUser” public class Reserve { public int ID { get; set; } public string Begin { get; set; } public string End { get; set; } public string Date { get; set; } public string Status {
public class Reserve
{
public int ID { get; set; }
public string Begin { get; set; }
public string End { get; set; }
public string Date { get; set; }
public string Status { get; set; } //free , reserved, confirmed, canceled
public DateTime LastUpdate { get; set; }
public ICollection<ReserveUser> ReservesUsers { get; set; }
}
public class ReserveUser
{
[Key]
public int Id { get; set; }
public string UserId { get; set; }
[ForeignKey("UserId")]
public virtual ApplicationUser User { get; set; }
public int ReserveId { get; set; }
[ForeignKey("ReserveId")]
public Reserve Reserve { get; set; }
}
public class ApplicationUser : IdentityUser
{
public bool IsProfessional { get; set; }
public ICollection<ReserveUser> ReservesUsers { get; set; }
}
如何将其发送到视图并访问它
我试过:
return View(usersByReserve);
而且不起作用
处理请求时发生未处理的异常
InvalidOperationException:传递到ViewDataDictionary的模型项的类型为“System.Collections.Generic.List`1[Reservation.Models.Reserve]”,但此ViewDataDictionary实例需要类型为“Reservation.Models.Reserve”的模型项。
可保证
当前代码将向视图返回集合的
Reserve
类对象(与where子句匹配)。但是您的视图需要一个Reserve类的实例。即使您的where子句是条件导致一条记录,它仍将返回一个项的集合,因为where
方法返回一个集合
由于要查找单个项(与where子句条件匹配),因此可以使用FirstOrDefault
方法来获取该项
var usersByReserve = _context.Reserves
.Where(m => m.ID == id)
.Include(ru => ru.ReservesUsers)
.ThenInclude(ap => ap.User)
.FirstOrDefault();
if(usersByReserve !=null)
{
return View(usersByReserve);
}
else
{
//return a "not found message/view"
return Content("No item found for the id passed");
}
现在,您需要将视图强类型化为Reserve类,然后可以根据需要访问属性
@model Reserve
<h1> @Model.Begin </h1>
@if(Model.ReservesUsers!=null)
{
<p>Some ReservesUsers found</p>
@foreach(var u in Model.ReservesUsers)
{
<p>@u.UserId </p>
}
}
else
{
<p>No ReservesUsers found!</p>
}
@型号保留
@模型,开始
@if(Model.ReservesUsers!=null)
{
发现了一些储备者
@foreach(模型ReservesUsers中的var u)
{
@u、 用户ID
}
}
其他的
{
找不到预订者
}
不起作用吗?你有错误吗?您的视图代码是什么样子的?谢谢Shyju,我只是为了工作做了一些修改,首先我将“@model Reserve”替换为“@model IEnumerable”,然后我添加了一个嵌套的for循环:“@foreach”(模型中的var项){foreach(item.ReservesUsers中的var user){@user.user.Email'}@是的。如果您想在页面中显示多个保留项,那么这将起作用。你不需要第一个或默认的电话。
@model Reserve
<h1> @Model.Begin </h1>
@if(Model.ReservesUsers!=null)
{
<p>Some ReservesUsers found</p>
@foreach(var u in Model.ReservesUsers)
{
<p>@u.UserId </p>
}
}
else
{
<p>No ReservesUsers found!</p>
}