我有两张桌子:区域和老板。
一个区域有一个Boss,它有一个外键关系Area.IDBoss,那就是Boss.ID.我希望我正确地解释我的问题。 :P
截至目前,我可以手动输入文本框中的数字并保存正确,我也可以正确显示名称,因为我正在使用实体框架,类似于“item.Boss.ID”在视图中工作良好。
我确实需要显示一个DropDownList。
我猜我必须使用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();
顺便说一下,我将一些变量名称从西班牙语翻译成英语,这样他们就会更有意义,对不起来感到困惑。
编辑3: 如果您需要更多信息,请告诉我们。我查看了每一行代码,但它不起作用。
答案 0 :(得分:0)
您可以在ViewData []中添加IEnumerable<SelectListItem>
。
var bossDropDown = from boss Area.Boss
select new SelectListItem
{
Value = boss.ID,
Text = boss.Name
};
ViewData["BossDropDown"] = bossDropDown;
在您的视图中,您可以像这样直接调用DropDown
<%=Html.DropDownList("BossDropDown", (SelectList)ViewData["BossDropDown"]) %>
使用您的代码,尝试更改此行
ViewData["jefes"] = jefeList;
到这个
ViewData["jefes"] = jefeList.AsEnumerable();
在您看来,更改此行
<%: Html.DropDownList("IDJefe", (SelectList)ViewData["jefes"]) %>
到这个
<%: Html.DropDownList("jefes", (SelectList)ViewData["jefes"]) %>
因为,您在下拉列表中调用的名称应该是具有IEnumerable<SelectListItem>
答案 1 :(得分:0)
这样做
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;
然后
<div class="editor-label">
<%: Html.LabelFor(model => model.IDJefe) %>
</div>
<div class="editor-field">
<%: Html.DropDownList("Jefes",ViewData["Jefes"] as List<SelectListItem>, "Select a boss ...") %>
<%: Html.ValidationMessageFor(model => model.IDJefe) %>
</div>
你的错误:你无法将列表转换为选择列表,这不起作用。 但说实话,我会这样做:
JefeRepository jefeRepo = new JefeRepository();
var jefes = jefeRepo.FindAll().OrderBy(x => x.Nombre);
ViewData["Jefes"] = new SelectList(jefes,"ID", "Nombre");
然后
<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>
让我知道哪一个最适合你;)