Entity framework 如何创建下拉列表?
我有两张桌子:Area和Boss 一个区域有一个Boss,它有一个外键关系Area.IDBoss,即Boss.ID。我希望我正确地解释了我的问题P 到目前为止,我可以在文本框中手动键入一个数字并正确保存,我还可以正确显示名称,因为我使用的是实体框架,类似于视图中的“item.Boss.ID”,它工作正常 我真的需要显示一个下拉列表 我猜我必须使用ViewData[]字典从数据库返回一组可用的“Boss”行,但我真的被卡住了D 有什么建议吗?这是一个非常简单的用例,希望我不要在上面花费太多时间。如果你们需要我的代码,就说吧,但我怀疑这对这么简单的问题会有帮助 和往常一样,这个网站非常棒,谢谢你的帮助 编辑: 也许发布一些代码会有所帮助。现在我收到这个错误: 编辑2: 使用仍不起作用的较新代码编辑 没有类型为的ViewData项 “IEnumerable”这个词 钥匙是“杰菲斯” 下面是代码: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 有什么建议吗?这是一个非常简单的用例,希望我不要在上面花费太多时间。如
<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>