“编辑”POST具有空值

时间:2016-01-11 23:52:07

标签: c# asp.net asp.net-mvc-5 entity-framework-6

我正在使用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之类的事情?

1 个答案:

答案 0 :(得分:1)

如果您未将GiftList数据与Gift属性一起发布到操作方法,那么就没有GiftList实体可以分配给{{1}属性。

从数据库加载实体,使用操作方法参数的属性更新属性,然后保存回数据库。

GiftList