0

ItemCategoryクラス:Entity FrameworkのでASP.NET MVCを使用して表示

public class ItemCategory 
    { 
     [Key] 
     public int CategoryId { get; set; } 
     [Required] 
     [Display(Name ="Category Name")] 
     public string CategoryName { get; set; } 
     public virtual ICollection<Item> Items { get; set; } 
    } 

Itemクラスは以下の通りです:

public class Item 
    { 
     [Key] 
     public int ItemId { get; set; } 
     [Required] 
     [Display(Name = "Item Name")] 
     public string ItemName { get; set; } 
     [DataType(DataType.Currency)] 
     public decimal Price { get; set; } 
     [DataType(DataType.Text)] 
     [Display(Name ="Category Code")] 
     public int CategoryId { get; set; } 

     public ItemCategory ItemCategory { get; set; } 
     [NotMapped] 
     public string CategoryName { get; set; } 
    } 

これはアイテムコントローラからのコードです:

// GET: Items/Details/5 
    public async Task<ActionResult> Details(int? id) 
    { 
     if (id == null) 
     { 
     return new HttpStatusCodeResult(HttpStatusCode.BadRequest); 
     } 

     var items = db.Items.Include(i => i.ItemCategory); 

     if (items == null) 
     { 
      return HttpNotFound(); 
     } 

     //var thisItem = db.Items.FirstOrDefault(item => item.ItemId == id); 
     return View(await db.Items.FindAsync(id)); 
} 

となり、表示コードは以下のようになります。

@model ContactManager.Models.Item 
@{ 
    ViewBag.Title = "Details"; 
} 
<h2>Details</h2> 
<div> 
    <h4>Item</h4> 
    <hr /> 
    <dl class="dl-horizontal"> 
     <dt> 
      @Html.DisplayNameFor(model => model.ItemCategory.CategoryName) 
     </dt> 
     <dd> 
      @Html.DisplayFor(model => model.ItemCategory.CategoryName) 
     </dd> 
     <dt> 
      @Html.DisplayNameFor(model => model.ItemCode) 
     </dt> 
     <dd> 
      @Html.DisplayFor(model => model.ItemCode) 
     </dd> 
     <dt> 
      @Html.DisplayNameFor(model => model.ItemName) 
     </dt> 
     <dd> 
      @Html.DisplayFor(model => model.ItemName) 
     </dd> 
     <dt> 
      @Html.DisplayNameFor(model => model.Price) 
     </dt> 
     <dd> 
      @Html.DisplayFor(model => model.Price) 
     </dd> 
     <dt> 
      @Html.DisplayNameFor(model => model.BarCode) 
     </dt> 
     <dd> 
      @Html.DisplayFor(model => model.BarCode) 
     </dd> 
    </dl> 
</div> 
<p> 
    @Html.ActionLink("Edit", "Edit", new { id = Model.ItemId }) | 
    @Html.ActionLink("Back to List", "Index") 
</p> 

私はASP.NET MVCおよびEntity Frameworkを初めて使用しています。コードを実行すると、このビューにカテゴリ名が表示されないので、このビューでどのようにカテゴリ名を取得できるのか本当に知りたいです...ありがとう

答えて

0

ItemCategory.CategoryNameの参照はnullです。 商品番号のモデルを変更してください。それが動作します。

public class Item 
    { 
     public Item() // Note this 
     { 
      ItemCategory = new ItemCategory(); 
     } 
     [Key] 
     public int ItemId { get; set; } 
     [Required] 
     [Display(Name = "Item Name")] 
     public string ItemName { get; set; } 
     [DataType(DataType.Currency)] 
     public decimal Price { get; set; } 
     [DataType(DataType.Text)] 
     [Display(Name = "Category Code")] 
     public int CategoryId { get; set; } 

     public ItemCategory ItemCategory { get; set; } 
     [NotMapped] 
     public string CategoryName { get; set; } 
    } 
+0

まだ作業中です! –

+0

'db.Items.FindAsync(id)'が 'ItemCategory'オブジェクトを返し、 'ItemCategory.CategoryName'にどの値が含まれているかを確認します。 – Anadi

+0

はい、ItemCategoryを返しますが、ItemCategoryはビューにnull値を返します。 –

関連する問題