C# 没有类型为';IEnumerable<;选择列表项>';那有钥匙';卡雷拉';
我在处理控制器的Post请求时遇到问题:C# 没有类型为';IEnumerable<;选择列表项>';那有钥匙';卡雷拉';,c#,asp.net-mvc-2,drop-down-menu,viewdata,C#,Asp.net Mvc 2,Drop Down Menu,Viewdata,我在处理控制器的Post请求时遇到问题: [HttpGet] public ActionResult Crear() { CarreraRepository carreraRepository = new CarreraRepository(); var carreras = carreraRepository.FindAll().OrderBy(x => x.Nombre); var carrerasList = new SelectList(carreras,
[HttpGet]
public ActionResult Crear()
{
CarreraRepository carreraRepository = new CarreraRepository();
var carreras = carreraRepository.FindAll().OrderBy(x => x.Nombre);
var carrerasList = new SelectList(carreras, "ID", "Nombre");
ViewData["Carreras"] = carrerasList;
Materia materia = new Materia();
return View(materia);
}
[HttpPost]
public ActionResult Crear(Materia materia, FormCollection values)
{
if (ModelState.IsValid)
{
repo.Add(materia);
repo.Save();
return RedirectToAction("Index");
}
return View(materia);
}
当HttpGet操作运行时,要创建的表单将呈现良好的效果。DropDownList上的值设置正确,一切正常;当我尝试提交表单(运行HttpPost操作)时,我收到了错误
有人能帮我吗
是因为HttpPost没有声明ViewData吗?谢谢您的帮助。由于您在同一视图上发布,因此当您发布到
创建时,视图数据[“Carreras”]
不会被创建。你必须在你的帖子中再次加载你的carreras的数据
[HttpPost]
public ActionResult Crear(Materia materia, FormCollection values)
{
CarreraRepository carreraRepository = new CarreraRepository();
var carreras = carreraRepository.FindAll().OrderBy(x => x.Nombre);
var carrerasList = new SelectList(carreras, "ID", "Nombre");
ViewData["Carreras"] = carrerasList;
if (ModelState.IsValid)
{
repo.Add(materia);
repo.Save();
return RedirectToAction("Index");
}
return View(materia);
}
这将解决问题。。。因为post和get都需要相同的前4行代码,所以我建议将它们提取到一个方法中,这样就可以在一个地方完成。这样,如果你改变它,你只需要在一个地方做。