Установка выбранного элемента в раскрывающемся списке в коде представления - PullRequest
0 голосов
/ 15 декабря 2009

У меня есть цикл создания формы в моем коде представления. Внутри формы у каждого элемента есть свой выпадающий список, который они все делят из данных представления:

    <%foreach(Foo i in Model){ %>
    <tr>
        <td><%=i.title%></td>
        <td><%=Html.DropDownList("order"+i.id.ToString(), ViewData["SequenceDropDown"] as SelectList)%></td>
    </tr>
    <%} %>

Мне нужно сделать так, чтобы выбранный элемент основывался на свойстве Foo (i.Sequence). Я не могу найти способ сделать это?

Я могу сделать это в контроллере, но я хочу иметь возможность поделиться списком выбора среди всех элементов и выбрать выбранный соответственно.

Ответы [ 2 ]

1 голос
/ 15 декабря 2009

Я думаю, вам нужно будет создать массив списков SelectItem в вашем действии, которые правильно идентифицируют выбранный элемент для каждого экземпляра. Затем вы можете создать выпадающие списки из этого массива.

Это будет более чистая реализация, чем делать это в представлении, так как представление должно быть максимально глупым.

0 голосов
/ 15 декабря 2009

Я написал метод быстрого беглого расширения, чтобы сделать это:

    public static IEnumerable<SelectListItem> WithSelected( this IEnumerable<SelectListItem> selectListItems, object selectedvalue )
    {
        var newItems = new List<SelectListItem>(selectListItems);

        foreach( var item in newItems )
            item.Selected = item.Value == selectedvalue.ToString();

        return newItems;
    }

    public static IEnumerable<CheckBoxItem> WithSelected(this IEnumerable<CheckBoxItem> selectListItems, int selectedvalue)
    {
        var newItems = new List<CheckBoxItem>(selectListItems);

        foreach (var item in newItems)
            item.Checked = item.Id == selectedvalue;

        return newItems;
    }

    public static IEnumerable<CheckBoxItem> WithSelected(this IEnumerable<CheckBoxItem> selectListItems, IEnumerable<int> selectedvalues)
    {
        var newItems = new List<CheckBoxItem>(selectListItems);

        foreach (var item in newItems)
            item.Checked = selectedvalues.Contains(item.Id);

        return newItems;
    }

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

<%foreach(Foo i in Model){ %>
<tr>
    <td><%=i.title%></td>
    <td><%=Html.DropDownList("order"+i.id.ToString(), (ViewData["SequenceDropDown"] as SelectList)).WithSelected(i.Sequence) %></td>
</tr>
<%} %>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...