2016-12-12 10 views
0

モデルデータと関連データを1つのビューで更新する際に問題があります。だから、私は2つのモデルを持っています。ASP.NET Entity Frameworkモデルデータと関連データを1つのビューで更新する

第一のモデルは、イベントについて説明します。

public class Event 
{ 
    public Event() 
    { 
     Guests = new List<Guest>(); 
    } 
    public int ID { get; set; } 
    [Required] 
    public DateTime EventDate { get; set; } 

    [Required] 
    public string EventTime { get; set; } 

    [Required] 
    [StringLength(100)] 
    public string EventName { get; set; } 

    public int Room { get; set; } 

    [StringLength(50)] 
    public string UserName { get; set; } 

    public string UserPhone { get; set; } 
    public bool Status { get; set; } 

    public virtual List<Guest> Guests { get; set; } 

    [NotMapped] 
    public string DateToString 
    { 
     get { return EventDate.ToShortDateString(); } 
     set { EventDate = DateTime.Parse(value); } 
    } 

そして、第二のモデルは、ゲストを説明します

public class Guest 
{ 
    public int ID { get; set; } 
    [Display(Name ="Vārds, uzvārds")] 
    public string GuestName { get; set; } 
    public string CardNumber { get; set; } 
    public bool Status { get; set; } 
} 

つのイベントのために、いくつかのゲストがあることができ、関係は1対多です。

ここでは、イベントに関連付けられたイベントとゲストに関する情報を表示する編集ビューを作成しました。表示方法は次のとおりです。

<div class="panel-body"> 
     @{ 
      @:<dl class="dl-horizontal"> 
      if (Model.Guests != null) 
      { 

       for (int i = 0; i < Model.Guests.Count; i++) 
       { 
        @:<dt>@Html.DisplayNameFor(m => m.Guests[i].GuestName)</dt> 
        @:<dt>@Html.EditorFor(m => m.Guests[i].GuestName)</dt> 
        } 
      } 
      @:</dl> 
     } 
    </div> 

私のコントローラでは、postメソッドで、編集されたゲストエントリのモデルを正常に受信しました。私は修正にコンテキストの状態を設定する場合しかし、私はエラーが表示されます、このコード行

public ActionResult Edit([Bind(Include = "ID,EventName,Room,EventDate,DateToString,EventTime,UserPhone,Status,Guests")] Event @event) 
    { 
     if (ModelState.IsValid) 
     { 
      @event.UserName = User.Identity.Name; 
      db.Entry(@event).State = EntityState.Modified; 
      db.SaveChanges(); 
      return RedirectToAction("Index"); 
     } 
     return View(@event); 
    } 

私にエラーを与える:

Attaching an entity of type 'GuestAudit.Models.Guest' failed because another entity of the same type already has the same primary key value.

私のコントローラのコードがある

db.Entry(@event).State = EntityState.Modified;

モデルデータと関連データを1つのビューで編集することは可能ですか?

答えて

0

私はようやく答えを見つけました。そこで、Viewコードを変更して、関連するレコードごとに隠し要素を追加しました。今、ビューのコードは次のようになります。

<div class="panel-body"> 
     @{ 
      @:<dl class="dl-horizontal"> 
      if (Model.Guests != null) 
      { 

       for (int i = 0; i < Model.Guests.Count; i++) 
       { 
        @:<dt>@Html.DisplayNameFor(m => m.Guests[i].GuestName)</dt> 
        @:<dt>@Html.EditorFor(m => m.Guests[i].GuestName)</dt> 
        @Html.HiddenFor(m => m.Guests[i].EventID) 
        @Html.HiddenFor(m => m.Guests[i].ID) 
       } 
      } 
      @:</dl> 
     } 
    </div> 

とコントローラは

public ActionResult Edit([Bind(Include = "ID,EventName,Room,EventDate,DateToString,EventTime,UserPhone,Status,Guests")] Event @event) 
    { 
     if (ModelState.IsValid) 
     { 
      @event.UserName = User.Identity.Name; 
      @event.Guests.ForEach(f => db.Entry(f).State = EntityState.Modified); 
      db.Entry(@event).State = EntityState.Modified; 
      db.SaveChanges(); 
      return RedirectToAction("Index"); 
     } 
     return View(@event); 
    } 
のように見えます
関連する問題