这个问题与我最近提出的另一个问题有关,可以找到here来获取一些背景信息。
以下是Edit ActionResult中的代码:
public virtual ActionResult Edit(int id)
{
///Set data for DropDownLists.
ViewData["MethodList"] = tr.ListMethods();
ViewData["GenderList"] = tr.ListGenders();
ViewData["FocusAreaList"] = tr.ListFocusAreas();
ViewData["SiteList"] = tr.ListSites();
ViewData["TypeList"] = tr.ListTalkbackTypes();
ViewData["CategoryList"] = tr.ListCategories();
return View(tr.GetTalkback(id));
}
我将列表添加到ViewData以在下拉列表中使用,这些列表都是IEnumerable并且都是返回值。
GetTalkback()返回一个类型为Talkback的Entity框架对象,该对象是从Talkback表生成的。
DropDownListFor代码是:
<%: Html.DropDownListFor(model=>model.method_id,new SelectList(ViewData["MethodList"] as IEnumerable<SelectListItem>,"Value","Text",Model.method_id)) %>
我正在查看的记录在所有字段中都有值。当我在视图上单击提交时,我得到的对象引用未设置为对象的实例。上面的错误。
在此之前的表单中有许多标准字段,因此错误仅发生在下拉列表中,并且正在所有这些字段上发生。
有什么想法吗?这是我第一次涉足MVC,C#和Entity,所以我完全迷失了!
答案 0 :(得分:1)
如果你有[HttpPost]
这样的方法
[HttpPost]
public ActionResult Edit(Talkback model)
{
//Do something with model
return View(model);
}
您必须再次填充ViewData。如果您不这样做,则会出现Object reference not set to an instance of an object
错误。
最好的办法是按照POST-REDIRECT-GET模式进行操作:
[HttpPost]
public ActionResult Edit(Talkback model)
{
//Do something with model
return RedirectToAction("Edit", new { id = model.id });
}
您将通过[HttpGet]
方法再次填充ViewData。