これはセットアップです:
モデル:
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 に変更すると、Nullreference 例外が発生します。
データベースのデバイス テーブルを調べると、2 つのデバイスがリストされており、それぞれに CategoryId と ManufactorId が含まれています。
これは 20 分間の簡単なことだと思いましたが、どこかでひどく間違っていたようです。このエラーの解決を手伝ってください。
追加のコードが必要な場合は、コメントに投稿してください。
敬具
編集: これらの非常に役立つ回答に応えて:エラーは私のコントローラーアクションの誤りでした。この解決策はうまくいきました:
return View(db.Devices.Include(d => d.Manufactor).Include(d => d.Category).ToList());