珍しい問題があります。データベースの 1 つのフィールド (FK_ItemType) は、それ自体を更新しません。私は vs デバッグに入り、int ItemType が割り当てられていること、データベース内にレコードが見つかったこと、そのレコードが item.FK_ItemType に割り当てられたこと、そのレコードが最後まで接続されたままになっていることを確認しましたdb.SaveChanges()
(ブレークポイントを使用してitem.FK_ItemType の値を確認してくださいdb.Entry(item).State = EntityState.Modified;
確かに、リダイレクトをコメントアウトしてデータベースからレコードを取得し、値を確認した直後に、リダイレクトの代わりにそれを返しました。正しい値を返します。
ただし、データベースを調べるか、リスト ページに移動すると、新しく更新された ItemType がありません (データベースではまだ NULL です)。さらに不可解なことに、レコードを追加すると、すべてが完全に正常に機能します。
これが私のコントローラーとモデルの関連セクションです
[HttpPost]
public ActionResult Edit(Item item, int Company = 0, int Service = 0, int ItemType = 0)
{
if (Request.Form["doDelete"] == "true")
return Delete(item);
//Get, assign foreign keys
Company c = db.Companies.Find(Company);
Service s = db.Services.Find(Service);
ItemType i = db.ItemTypes.Find(ItemType);
if (c != null)
item.FK_Company = c;
if (s != null)
item.FK_Service = s;
if (i != null)
item.FK_ItemType = i;
//Force revalidate
ModelState.Clear();
//TryUpdateModel(item);
TryValidateModel(item);
if (ModelState.IsValid)
{
if (item.ItemID == 0) //add
db.Items.Add(item);
else
{
db.Entry(item).State = EntityState.Modified;
}
db.SaveChanges();
Item i2 = db.Items.Find(item.ItemID);
Response.Write(i2.FK_ItemType.Name);
return null;
// Return to the listing page, and show the user the filters they were looking at before editing.
return Redirect("~/" + Request.RequestContext.RouteData.Values["Controller"].ToString() + "/Index/" + Request.Form["ref"]);
}
// There was a validation error
if (item.ItemID != 0)
return Update(item);
else
return Add(item);
}
モデル
public class Item
{
public int ItemID { get; set; }
...
[Required]
[Display(Name="Company")]
public virtual Company FK_Company { get; set; }
[Required]
[Display(Name="Service")]
public virtual Service FK_Service { get; set; }
[Display(Name="Item Type")]
public virtual ItemType FK_ItemType { get; set; }
}