Entity framework 如何创建下拉列表?

Entity framework 如何创建下拉列表?,entity-framework,asp.net-mvc-2,drop-down-menu,Entity Framework,Asp.net Mvc 2,Drop Down Menu,我有两张桌子:Area和Boss 一个区域有一个Boss,它有一个外键关系Area.IDBoss,即Boss.ID。我希望我正确地解释了我的问题P 到目前为止,我可以在文本框中手动键入一个数字并正确保存,我还可以正确显示名称,因为我使用的是实体框架,类似于视图中的“item.Boss.ID”,它工作正常 我真的需要显示一个下拉列表 我猜我必须使用ViewData[]字典从数据库返回一组可用的“Boss”行,但我真的被卡住了D 有什么建议吗?这是一个非常简单的用例,希望我不要在上面花费太多时间。如

我有两张桌子:Area和Boss

一个区域有一个Boss,它有一个外键关系Area.IDBoss,即Boss.ID。我希望我正确地解释了我的问题P

到目前为止,我可以在文本框中手动键入一个数字并正确保存,我还可以正确显示名称,因为我使用的是实体框架,类似于视图中的“item.Boss.ID”,它工作正常

我真的需要显示一个下拉列表

我猜我必须使用ViewData[]字典从数据库返回一组可用的“Boss”行,但我真的被卡住了D

有什么建议吗?这是一个非常简单的用例,希望我不要在上面花费太多时间。如果你们需要我的代码,就说吧,但我怀疑这对这么简单的问题会有帮助

和往常一样,这个网站非常棒,谢谢你的帮助

编辑: 也许发布一些代码会有所帮助。现在我收到这个错误:

编辑2: 使用仍不起作用的较新代码编辑

没有类型为的ViewData项 “IEnumerable”这个词 钥匙是“杰菲斯”

下面是代码:

<fieldset>
    <legend>Fields</legend>

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

    <div class="editor-label">
        <%: Html.LabelFor(model => model.Nombre) %>
    </div>
    <div class="editor-field">
        <%: Html.TextBoxFor(model => model.Nombre) %>
        <%: Html.ValidationMessageFor(model => model.Nombre) %>
    </div>

    <p>
        <input type="submit" value="Create" />
    </p>
</fieldset>

JefeRepository jefeRepo = new JefeRepository();
var jefes = jefeRepo.FindAll().OrderBy(x => x.Nombre);
var jefeList = new List<SelectListItem>();
foreach (var jefe in jefes)
{
    jefeList.Add(new SelectListItem()
    {                    
        Text = jefe.Nombre,
        Value = jefe.ID.ToString()
    });
}
ViewData["Jefes"] = jefeList.AsEnumerable();

领域
model.IDJefe)%>
--%>
model.IDJefe)%>
型号(Nombre)%>
型号(Nombre)%>
型号(Nombre)%>

JefeRepository jefeRepo=新的JefeRepository(); var jefes=jefeRepo.FindAll().OrderBy(x=>x.Nombre); var jefeList=新列表(); foreach(jefes中的var jefe) { 添加(新的SelectListItem() { Text=jefe.Nombre, Value=jefe.ID.ToString() }); } ViewData[“Jefes”]=jefeList.AsEnumerable();
顺便说一句,我将一些变量名从西班牙语翻译成英语,这样它们会更有意义,很抱歉造成混淆

编辑3:
如果你们需要更多的信息,请告诉我。我已经检查了每一行代码,但都不起作用。

您可以在ViewData[]中放置一个
IEnumerable

var bossDropDown = from boss Area.Boss
                   select new SelectListItem
                   {
                       Value = boss.ID,
                       Text = boss.Name
                   };
ViewData["BossDropDown"] = bossDropDown;
在你看来,你可以像这样直接调用你的下拉列表

<%=Html.DropDownList("BossDropDown", (SelectList)ViewData["BossDropDown"]) %>
对此

ViewData["jefes"] = jefeList.AsEnumerable();
<%: Html.DropDownList("jefes", (SelectList)ViewData["jefes"]) %>
在您看来,更改这一行

ViewData["jefes"] = jefeList;
<%: Html.DropDownList("IDJefe", (SelectList)ViewData["jefes"]) %>

对此

ViewData["jefes"] = jefeList.AsEnumerable();
<%: Html.DropDownList("jefes", (SelectList)ViewData["jefes"]) %>

因为,您在dropdownlist中调用的名称应该是ViewData的键,它具有
IEnumerable

执行此操作

JefeRepository jefeRepo = new JefeRepository();
var jefes = jefeRepo.FindAll().OrderBy(x => x.Nombre);
List<SelectListItem> jefeList = new List<SelectListItem>();
foreach (var jefe in jefes)
{
    jefeList.Add(new SelectListItem()
    {                    
        Text = jefe.Nombre,
        Value = jefe.ID.ToString()
    });
}
ViewData["Jefes"] = jefeList;
然后


model.IDJefe)%>
model.IDJefe)%>

让我知道哪一个最适合你;)

你好,我在你写答案的时候更新了我的帖子。正如你所看到的,我认为我在做同样的事情,但这给了我一个错误。请您修改编辑,谢谢您的时间。:)你的更新仍然给了我一个错误。似乎没有将密钥保存到ViewData字典中。我不知道为什么。嗨,罗布,它还是不工作。我确信它现在应该可以工作了,因为ViewData中的键是“Jefes”,itemlist是使用.AsEnumerable()转换的。我不知道该怎么办。用更新的代码编辑了我的问题。
<div class="editor-label">
    <%: Html.LabelFor(model => model.IDJefe) %>
</div>
<div class="editor-field">
    <%: Html.DropDownList("Jefes",ViewData["Jefes"] as SelectList, "Select a boss ...") %>
    <%: Html.ValidationMessageFor(model => model.IDJefe) %>
</div>