[英]The INSERT statement conflicted with the FOREIGN KEY constraint - asp.net.mvc5
[英]The UPDATE statement conflicted with the FOREIGN KEY constraint in asp.net mvc 5
我收到此錯誤:
UPDATE語句與FOREIGN KEY約束“FK_TitleMember”沖突。 沖突發生在數據庫“ParishDBSQL”,表“dbo.Titles”,列'title_id'中。 該語句已終止。
調節器
采取行動
public ActionResult Edit(int? id)
{
var member = (from h in db.Members
join f in db.Titles on h.title_id equals f.title_id
where h.m_id == id
select new
{
title_id = h.title_id,
}).First();
var viewmodel = new MembersViewModel();
viewmodel.title_id = member.title_id;
ViewBag.Titles = new SelectList(db.Titles.ToList(), "title_id", "Titles", viewmodel.title_id);
return View(viewmodel);
}
發布行動
public ActionResult Edit(MembersViewModel vm)
{
if (ModelState.IsValid)
{
var member = db.Members.Find(vm.m_id);
member.title_id = vm.title_id;
ViewBag.Titles = new SelectList(db.Titles.ToList(), "title_id", "Titles", vm.title_id);
db.Members.Attach(member);
db.Entry(member).State = EntityState.Modified;
db.SaveChanges();
return RedirectToAction("Index");
}
return View(vm);
視圖
<div class="col-md-4">
<div class="form-group">
<label>Title</label>
@Html.DropDownList("Titles")
@Html.ValidationMessageFor(model => model.title_id)
</div>
</div>
模型
public partial class Title
{
public Title()
{
this.Heads = new HashSet<Head>();
this.Members = new HashSet<Member>();
}
public int title_id { get; set; }
public string Titles { get; set; }
public virtual ICollection<Head> Heads { get; set; }
public virtual ICollection<Member> Members { get; set; }
}
視圖模型
public class MembersViewModel
{
public int m_id { get; set; }
public string titles { get; set; }
public int title_id { get; set; }
}
我想使用我的成員表表上的下拉列表更新title_id,但是我得到上面顯示的錯誤。
我認為錯誤就在這一行
member.title_id = vm.title_id
也許vm.title_id
在主表中vm.title_id
它並且它不能是外鍵。 檢查此變量的正確值
如果它沒有解決你看到你的代碼的問題,我看到了一些我不太了解的東西。
嘗試以這種方式更改您的代碼
if (ModelState.IsValid)
{
var member = db.Members.Find(vm.m_id);
member.title_id = vm.title_id;
ViewBag.Titles = new SelectList(db.Titles.ToList(), "title_id", "Titles", vm.title_id);
db.SaveChanges();
return RedirectToAction("Index");
}
通常我使用db.Entry(member).State = EntityState.Modified;
如果我必須在db.SaveChanges();
之前做其他更改db.SaveChanges();
member
已經附在你的桌子上了。 你為什么db.Members.Attach(member);
更新
更改
@Html.DropDownListFor(m => m.title_id, ViewBag.Titles)
成
@Html.DropDownListFor(m => m.title_id, (SelectList) ViewBag.Titles)
因為ViewBag
是一個動態對象
問題是視圖中的下拉列表。 你真的想要像這樣初始化它:
@Html.DropDownListFor(m => m.title_id, ViewBag.Titles)
現在初始化它的方式會導致所選值作為查詢字符串參數傳遞 - 您應該看到URL被發布為...?Titles=1
例如, ...?Titles=1
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.