Как получить выбранное значение некоторого выпадающего списка, вызываемого несколько раз в цикле? - PullRequest
0 голосов
/ 16 марта 2011

В моем приложении мне нужно отобразить некоторый выпадающий список, связанный с линией отображения.

<table>
        <% foreach (var item in Model) { %>
                <td>
                <%= Html.Encode(item.COMPETENCE_LIBELLE) %>
            </td>
            <td>
                <%= Html.DropDownListFor(item.FK_NIVEAU_ID, (SelectList)ViewData["FK_Niveau"]%>
            </td>
<% } %>
</table>

Однако я не знаю, почему выбранное значение моего ddlist никогда не отображается ...

У меня нет проблем с отображением выбранного значения одного списка ddlist, но когда он находится в цикле ... Я не знаю, что делать ...

Есть идеи?

1 Ответ

0 голосов
/ 16 марта 2011

Если вам нужно отобразить несколько раскрывающихся списков, то вам может потребоваться адаптировать модель представления. Итак, давайте рассмотрим пример:

public class ItemsViewModel
{
    public string Label { get; set; }
    public string SelectedId { get; set; }
    public IEnumerable<SelectListItem> Values { get; set; }
}

public class MyViewModel
{
    public IEnumerable<ItemsViewModel> Items { get; set; }
}

затем выполните действие контроллера, которое заполнит эту модель представления:

public ActionResult Index() 
{
    var model = new MyViewModel
    {
        Items = new[]
        {
            // TODO: fetch from your repository
            new ItemsViewModel 
            { 
                Label = "label 1",
                Values = new[] 
                { 
                    new SelectListItem { Value = "1", Text = "item 1" },
                    new SelectListItem { Value = "2", Text = "item 2" }
                }
            },
            new ItemsViewModel 
            { 
                Label = "label 2",
                // Automatically preselect the second item in the ddl
                SelectedId = "B",
                Values = new[] 
                { 
                    new SelectListItem { Value = "A", Text = "foo1" },
                    new SelectListItem { Value = "B", Text = "bar" }
                }
            },
        }
    }
    return View(model);
}

и затем иметь соответствующий строго типизированный вид:

<table>
    <thead> 
        <tr>
            <th>Label</th>
            <th>Values</th>
        </tr>
    </thead>
    <tbody>
        <%= Html.EditorFor(x => x.Items)
    </tbody>
</table>

и в соответствующем шаблоне редактора (~/Views/Shared/EditorTemplates/ItemsViewModel.ascx):

<%@ Control 
    Language="C#" 
    Inherits="System.Web.Mvc.ViewUserControl<AppName.Models.ItemsViewModel>" 
%>
<tr>
    <td>
        <%: Model.Label %>
    </td>
    <td>
        <%= Html.DropDownListFor(
            x => x.SelectedId, 
            new SelectList(Model.Items, "Values", "Text")
        ) %>
    </td>
</tr>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...