Использовать dropdownlist для foreach в Asp.Net MVC View? - PullRequest
4 голосов
/ 24 марта 2011

У меня есть представление с циклом foreach для свойства списка модели.Теперь я хочу, чтобы пользователь мог установить значение каждого элемента в списке с помощью раскрывающегося списка.Но я не уверен, как это сделать.Я использовал что-то подобное, когда это не в цикле foreach:

@Html.DropDownListFor(model => model.Level, new SelectList(new[] { 1, 2, 3, 4, 5 }, Model.Level))

Но как мне это сделать, когда мне нужно ссылаться на item.Level в цикле?Вот мой код просмотра:

<div id="formDiv">
    @using (Html.BeginForm(null, null, FormMethod.Post, new { id = "myForm" }))
    {
        @Html.ValidationSummary(true)
        <fieldset>
            <legend>Ny arbetserfarenhet</legend>
            <table>
                <tr>
                    @*<th></th>*@
                    <th>
                        Program
                    </th>
                    <th>
                        Nivå
                    </th>
                </tr>
                @foreach (var item in Model) {
                    <tr>
                        <td>
                            @item.Program.Name
                        </td>
                        <td>

                            @item.Level
                        </td>
                    </tr>
}
            </table>
        </fieldset>
    }
</div>

Ответы [ 4 ]

8 голосов
/ 24 марта 2011

У меня есть представление с циклом foreach для свойства списка в режиме

Я бы порекомендовал вам избегать написания циклов в ваших представлениях в пользу шаблонов редактора.Итак:

@model IEnumerable<AppName.Models.ModelName>
<div id="formDiv">
    @using (Html.BeginForm(null, null, FormMethod.Post, new { id = "myForm" }))
    {
        @Html.ValidationSummary(true)
        <fieldset>
            <legend>Ny arbetserfarenhet</legend>
            <table>
                <tr>
                    <th>
                        Program
                    </th>
                    <th>
                        Nivå
                    </th>
                </tr>
                @Html.EditorForModel()
            </table>
        </fieldset>
    }
</div>

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

@model AppName.Models.ModelName
<tr>
    <td>@Model.Program.Name</td>
    <td>
        @Html.DropDownListFor(
            model => model.Level, 
            new SelectList(
                Enumerable.Range(1, 5).Select(x => new { Value = x, Text = x }), 
                "Value", 
                "Text"
            )
        )
    </td>
</tr>

Таким образом, шаблон редактора будет отображаться для каждого элемента вашей модели (который является коллекциейкакого-то типа).Важной частью является то, что шаблон редактора должен находиться в ~/Views/Shared/EditorTemplates и называться XXX.cshtml, где XXX - это имя типа, используемое в вашей коллекции моделей основного вида.

5 голосов
/ 24 марта 2011

Вы пробовали:

@Html.DropDownListFor(m => item.Level, new SelectList(new[] { 1, 2, 3, 4, 5 }, item.Level))
0 голосов
/ 26 июня 2013

MVC создаст цикл.Просто используйте шаблон редактора, частичное представление в специальной папке, а все остальное работает как по волшебству.

Шаблон редактора

@model Models.AdditionalAccountingLine
@Html.HiddenFor(m => m.IsRequired)
@Html.DropDownListFor(m => m.FieldValue, new SelectList(@Model.FieldValueOptions, "Key", "Value"), "")

Просмотр

@Html.EditorFor(m => m.AdditionalAccountingLines);
0 голосов
/ 24 марта 2011

используйте этот синтаксис:

  @Html.DropDownListFor(model => model.Level, new SelectList(Model.level as System.Collections.IEnumerable, "VALUE_FIELD", "TEXT_FIELD", YOUR PROPERTY NAME)
...