如何创建DropDownList?

时间:2010-08-18 00:15:20

标签: entity-framework asp.net-mvc-2 drop-down-menu

我有两张桌子:区域和老板。

一个区域有一个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: 如果您需要更多信息,请告诉我们。我查看了每一行代码,但它不起作用。

2 个答案:

答案 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>

的ViewData的键

答案 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>

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