C# 我的简单应用程序上的强制转换异常无效

C# 我的简单应用程序上的强制转换异常无效,c#,asp.net-mvc-2,.net,C#,Asp.net Mvc 2,.net,要点是:我的学校有一张班级名单。每个班级都属于一个职业。我正在创建一个新的班级表格,例如数学、社会研究等。在这个表格上,我想用我们提供的职业来生成一个下拉列表 无法强制转换类型为的对象 'System.Collections.Generic.List'1[System.Web.Mvc.SelectListItem]' 键入“System.Web.Mvc.SelectList” 这是我的密码: [HttpGet] public ActionResult Crear() { CarreraR

要点是:我的学校有一张班级名单。每个班级都属于一个职业。我正在创建一个新的班级表格,例如数学、社会研究等。在这个表格上,我想用我们提供的职业来生成一个下拉列表

无法强制转换类型为的对象 'System.Collections.Generic.List'1[System.Web.Mvc.SelectListItem]' 键入“System.Web.Mvc.SelectList”

这是我的密码:

[HttpGet]
public ActionResult Crear()
{
    CarreraRepository carreraRepository = new CarreraRepository();
    var carreras = carreraRepository.FindAll().OrderBy(x => x.Nombre);
    var carrerasList = new List<SelectListItem>();

    foreach (var carrera in carreras)
    {
        carrerasList.Add(new SelectListItem()
        {
            Text = carrera.Nombre,
            Value = carrera.ID.ToString()
        });
    }

    ViewData["Carreras"] = carrerasList.AsEnumerable();

    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]
公共行动结果(Crear)
{
CarreraRepository CarreraRepository=新的CarreraRepository();
var carreras=carreraRepository.FindAll().OrderBy(x=>x.Nombre);
var carrerasList=新列表();
foreach(卡雷拉斯的carrera车型)
{
carrerasList.Add(新建SelectListItem()
{
Text=carrera.Nombre,
值=carrera.ID.ToString()
});
}
ViewData[“Carreras”]=carrerasList.AsEnumerable();
材料=新材料();
返回视图(材料);
}
[HttpPost]
公共行动结果Crear(材料、表格收集值)
{
if(ModelState.IsValid)
{
补充回购(材料);
repo.Save();
返回操作(“索引”);
}
返回视图(材料);
}
以下是观点:

<div class="editor-label">
    <%: Html.LabelFor(model => model.IDCarrera) %>
</div>
<div class="editor-field">
    <%: Html.DropDownList("Carrera", (SelectList)ViewData["Carreras"]) %>
    <%--<%:Html.TextBoxFor(model => model.IDCarrera)%>--%>
    <%: Html.ValidationMessageFor(model => model.IDCarrera) %>
</div>

型号:IDCarrera)%>
--%>
型号:IDCarrera)%>

有什么建议吗?我的代码数据库模式和代码非常简单,因此对于某些人来说,错误可能非常明显。谢谢你的帮助!:)

您应该在视图数据中放置一个
选择列表
,而不是像这样的
列表

var carreras = carreraRepository.FindAll().OrderBy(x => x.Nombre);
var carrerasList = new SelectList(carreras, "ID", "Nombre");

ViewData["Carreras"] = carrerasList;

对我来说,既然您有
IEnumerable
的列表,您可以将其放入
ViewData
变量中,如下所示:

CarreraRepository carreraRepository = new CarreraRepository();
var carreras = carreraRepository.FindAll().OrderBy(x => x.Nombre);

IEnumerable<SimpleListItem> carrerasList = 
    carreras.Select(d => new SelectListItem { 
        Text = d.Nombre, 
        Value = d.ID.ToString() 
    }
);

ViewData["Carreras"] = carrerasList;
CarreraRepository CarreraRepository=new CarreraRepository();
var carreras=carreraRepository.FindAll().OrderBy(x=>x.Nombre);
IEnumerable列表=
Select(d=>newselectListItem{
Text=d.标称值,
Value=d.ID.ToString()
}
);
ViewData[“Carreras”]=carrerasList;
然后在您的视图中执行此操作:

@Html.DropDownList("Carreras", (IEnumerable<SelectListItem>)ViewData["Carreras"])
@Html.DropDownList(“Carreras”,(IEnumerable)视图数据[“Carreras”])

这段代码看起来棒极了!合乎逻辑,而且似乎会奏效。如何在视图中使用此选项?我将Carreras字典项强制转换为什么?因为
ViewData
中包含的数据现在是
SelectList
,您可以强制转换为
SelectList
。我假设
carreraRepository
是实体框架上下文?如果是:
“Model1”不包含“FindAll”的定义,并且找不到接受“Model1”类型的第一个参数的扩展方法“FindAll”(是否缺少using指令或程序集引用?
,如果它应该是数据库中的模型,您得到:
“DbSet”不包含“FindAll”的定义,并且找不到接受“DbSet”类型的第一个参数的扩展方法“FindAll”(是否缺少using指令或程序集引用?)