使用DropDownListFor()时编辑视图中的ASP.Net MVC对象引用

时间:2010-05-02 21:34:01

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

这个问题与我最近提出的另一个问题有关,可以找到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,所以我完全迷失了!

1 个答案:

答案 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。