Ссылка на объект ASP.Net MVC в режиме редактирования при использовании DropDownListFor () - PullRequest
0 голосов
/ 03 мая 2010

Этот вопрос связан с другим вопросом, который я недавно задавал, его можно найти здесь для некоторой справочной информации.

Вот код в редакторе 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 () возвращает объект платформы Entity типа Talkback, который генерируется из таблицы Talkback.

Код DropDownListFor:

<%: Html.DropDownListFor(model=>model.method_id,new SelectList(ViewData["MethodList"] as IEnumerable<SelectListItem>,"Value","Text",Model.method_id)) %>

Запись, которую я просматриваю, имеет значения во всех полях. Когда я нажимаю «Отправить» в представлении, я получаю ссылку на объект, не установленную на экземпляр объекта. ошибка в приведенной выше строке.

До этого в форме было несколько стандартных полей, поэтому ошибка возникает только в раскрывающихся списках и во всех них.

Есть идеи? Это мой первый набег на MVC, C # и Entity, так что я полностью потерян!

1 Ответ

1 голос
/ 03 мая 2010

Если у вас есть [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 });
}

Вам снова будут заполнены ViewData методом [HttpGet].

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...