【发布时间】: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