基本 MVC 视图将模型属性返回为空
本文关键字:返回 属性 模型 MVC 视图 基本 | 更新日期: 2023-09-27 18:35:46
这是设置:
型:
public class Device
{
[Key]
public int Id { get; set; }
[MaxLength(50)]
public String Name { get; set; }
public Category Category { get; set; }
public Manufactor Manufactor { get; set; }
public virtual ICollection<Comment> Comments { get; set; }
public virtual ICollection<Status> Status { get; set; }
}
控制器操作:
public ActionResult Index()
{
var devices = db.Devices.Include("Categories").Include("Manufactors").Select(x => new Device
{
Name = x.Name,
Category = x.Category,
Comments = x.Comments,
Manufactor = x.Manufactor,
Status = x.Status
});
return View(db.Devices.ToList());
}
视图:
@foreach (var item in Model) {
<tr>
<td>
@Html.DisplayFor(modelItem => item.Name)
</td>
<td>
@Html.DisplayFor(modelItem => item.Manufactor.Name)
</td>
<td>
@Html.DisplayFor(modelItem => item.Category.Name)
</td>
<td>
@Html.DisplayFor(modelItem => item.Status)
</td>
<td>
@Html.ActionLink("Edit", "Edit", new { id=item.Id }) |
@Html.ActionLink("Details", "Details", new { id=item.Id }) |
@Html.ActionLink("Delete", "Delete", new { id=item.Id })
</td>
</tr>
}
这里的问题是,只显示名称,但item.Category
和item.Manufactor
不显示。如果我将该行更改为简单的@item.Category.Name 则会遇到空引用异常。
查看我的数据库到设备表中,列出了 2 个设备,每个设备都有一个 CategoryId 和 ManufactorId。
我认为这是20分钟的不费吹灰之力,但似乎我在某个地方犯了大错。请帮我解决此错误。
如果您需要其他代码,只需将其发布在评论中即可。
亲切问候
编辑:回应那些非常有用的答案:错误是我的控制器操作错误。此解决方案有效:
return View(db.Devices.Include(d => d.Manufactor).Include(d => d.Category).ToList());
您的模型属性称为 Category
,而不是Categories,
因此请确保您正在制作正确的Include
:
db.Devices.Include("Category")...
当然,Manufacturers
也是如此。您的模型属性称为Manufactor
而不是Manufactors
因此请包含正确的属性:
.Include("Manufactor")
现在,EF 将在表中进行适当的联接,并冻结可在视图中使用的Category
和Manufactor
属性。
除了Darin的回答:还有一个可用的Include()
方法的强类型变体,当你使用不存在的属性时,它会在编译时警告你:
db.Devices.Include(d => d.Category)
参考: DbExtensions.Include()