我正在使用EF6制作一个ASP.NET MVC 5 Web应用程序。这是我在添加控制器时给出的Edit()方法:
// POST: Gift/Edit/5
// To protect from overposting attacks, please enable the specific properties you want to bind to, for
// more details see http://go.microsoft.com/fwlink/?LinkId=317598.
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Edit([Bind(Include = "ID,Name,Description,Link,Price")] Gift gift)
{
if (ModelState.IsValid)
{
db.Entry(gift).State = EntityState.Modified;
db.SaveChanges();
return RedirectToAction("View", "GiftList", new { id = gift.GiftList.ID });
}
return View(gift);
}
以下是礼物的模型:
public class Gift {
public int ID { get; set; }
public string Name { get; set; }
public string Description { get; set; }
public string Link { get; set; }
public decimal Price { get; set; }
public virtual GiftList GiftList { get; set; }
public virtual ApplicationUser Buyer { get; set; }
}
我遇到的问题是,当我进入编辑页面并保存时,我收到一个错误,因为传递给Edit()的Gift对GiftList有一个空值。
抛出的异常:
System.NullReferenceException: Object reference not set to an instance of an object.
在这一行:
return RedirectToAction("View", "GiftList", new { id = gift.GiftList.ID });
我尝试将“GiftList”添加到参数的Include部分,但gift.GiftList仍为null。这是我获取gift.GiftList时遇到问题的唯一区域。我觉得这与在编辑网页上编辑的值有关,但我无法在网上找到任何关于此的内容。有什么方法可以轻易地从礼物中获取GiftList,还是我必须做db.Gifts.FirstOrDefault(x => x.ID == gift.ID).GiftList
之类的事情?
答案 0 :(得分:1)
如果您未将GiftList
数据与Gift
属性一起发布到操作方法,那么就没有GiftList
实体可以分配给{{1}属性。
从数据库加载实体,使用操作方法参数的属性更新属性,然后保存回数据库。
GiftList