【问题标题】:There is no ViewData item of type 'IEnumerable<SelectListItem>' that has the key "Projects"没有具有“项目”键的“IEnumerable<SelectListItem>”类型的 ViewData 项
【发布时间】:2015-02-04 01:07:54
【问题描述】:

我是 MVC Razor 的新手。我正在尝试插入 de DB,但我得到了这个期望:

没有“IEnumerable”类型的 ViewData 项具有键“Projects”

我使用 EntityFramework (DB First) 作为我的 MVC 模型。我在 DropDownList 中收到此错误,我使用 Linq 检索数据以填充我的 DropDwonList,这是我的代码:

控制器:

// GET: /Actividad/

public ActionResult AgregarActividad()
{
    var db = new WTMEntities();

    var proyectos = (from pro in db.Proyecto
                     select new
                     {
                         Id = pro.Id,
                         Nombre = pro.Nombre
                     }).ToList();
    ViewData["Projects"] = new SelectList(proyectos.Select(i => i.Nombre));

    return View();
}

[HttpPost]
public ActionResult AgregarActividad(Actividades act)
{
    if (ModelState.IsValid)
    {
        var db = new WTMEntities();

        var proyectos = (from pro in db.Proyecto
                         select new
                         {
                             Id = pro.Id,
                             Nombre = pro.Nombre
                         }).ToList();
        ViewData["Projects"] = new SelectList(proyectos.Select(i => i.Nombre));

        var actividad = db.Set<Actividades>();
        actividad.Add(act);
        db.SaveChanges();

        return View();
    }
    else
    {
        return View();
    }
}

查看

<div>
    <p>Proyecto</p>
    @Html.DropDownList(
    "Projects", null, string.Empty, new { style = "width: 200px;" })
</div>

如果有人能帮我一把,我将不胜感激!

【问题讨论】:

  • 在您的 POST 方法中,您有一个返回视图的 else 语句,但您没有重新填充 ViewData["Projects"],因此它的 null 会导致异常
  • 谢谢!! @StephenMuecke 这实际上是问题所在。问候
  • 你可以将这7行简化为ViewData["Projects"] = new SelectList(db.Proyecto, "Nombre", "Nombre");,然后把它放在一个私有方法中,因为你多次调用它。
  • 这是我更喜欢将 PRG 模式用于无效回发的原因之一。当然,当涉及到视图状态时,它需要一些额外的工作,因为它不会在请求之间持久化。但这可以通过将所需信息迁移到 TempData 中来解决,然后在后续操作中再次返回。属性在这方面做得很好。
  • 好的,我马上试试!!谢谢@StephenMuecke

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


【解决方案1】:

您的 post 方法没有重新填充 ViewData。 我已经修改了你的代码...在下面找到。

[HttpPost]
public ActionResult AgregarActividad(Actividades act)
{
var db = new WTMEntities();

        var proyectos = (from pro in db.Proyecto
                         select new
                         {
                             Id = pro.Id,
                             Nombre = pro.Nombre
                         }).ToList();
        ViewData["Projects"] = new SelectList(proyectos.Select(i => i.Nombre));

    if (ModelState.IsValid)
    {
        var actividad = db.Set<Actividades>();
        actividad.Add(act);
        db.SaveChanges();

        return View();
    }
    else
    {
        return View();
    }
}

【讨论】:

  • 谢谢!!这就是问题所在;)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-04-26
  • 2020-06-28
  • 2020-08-20
  • 2011-02-20
  • 2015-03-11
相关资源
最近更新 更多