Как я могу создать DropDownList? - PullRequest
1 голос
/ 18 августа 2010

У меня есть две таблицы: Площадь и Босс.

В области есть Босс, он имеет отношение внешнего ключа к Area.IDBoss, и это Boss.ID. Надеюсь, я правильно объясняю свой вопрос. : P

На данный момент я могу вручную ввести число в текстовое поле, и оно сохраняется правильно, я также могу правильно отобразить имя, потому что я использую Entity Framework, что-то вроде "item.Boss.ID" в представлении работает отлично.

Мне действительно нужно отобразить DropDownList.

Я предполагаю, что мне нужно вернуть набор доступных строк "Boss" из моей базы данных, используя словарь ViewData [], но я честно застрял. : D

Есть предложения? Это очень простой вариант использования, поэтому, надеюсь, я не буду тратить на это слишком много времени. Если вам, ребята, нужен какой-то код с моей стороны, просто скажите, но я сомневаюсь, что это поможет для такого простого вопроса.

Как всегда, этот сайт просто фантастический, спасибо за помощь.

Edit: Может быть, размещение кода поможет. Прямо сейчас я получаю эту ошибку:

Редактировать 2: Отредактировано с использованием более нового кода, который все еще не работает.

Нет элемента типа ViewData «IEnumerable», который имеет ключ 'Jefes'.

А вот код:

<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 голосов
/ 23 августа 2010

сделать это

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");

1010 * тогда *

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

дайте мне знать, какой из них лучше всего подходит для вас;)

0 голосов
/ 18 августа 2010

Вы можете поместить IEnumerable<SelectListItem> в свои ViewData [].

var bossDropDown = from boss Area.Boss
                   select new SelectListItem
                   {
                       Value = boss.ID,
                       Text = boss.Name
                   };
ViewData["BossDropDown"] = bossDropDown;

и в вашем View вы можете напрямую вызывать свой DropDown, как этот

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

EDIT:

С вашим кодом попробуйте изменить эту строку

ViewData["jefes"] = jefeList;

к этому

ViewData["jefes"] = jefeList.AsEnumerable();

На ваш взгляд, Изменить эту строку

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

к этому

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

, поскольку имя, которое вы называете в раскрывающемся списке, должно быть ключом ваших ViewData с IEnumerable<SelectListItem>

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...