Как получить Html.DropdownFor () для выбора текущего элемента? - PullRequest
1 голос
/ 11 ноября 2010

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

Сначала я генерирую список выбора в контроллере следующим образом:

        // Select List
        ViewData["FieldTypesList"] = new SelectList(
            genesisRepository.FieldTypes, "ftID", "ftName"
            );

Представление, использующее этот список выбора, выглядит следующим образом:

    <%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl<Genesis.Domain.Entities.Stream2FieldTypes>" %>
    <%@ Import Namespace="Genesis.Domain.Entities" %>        
    <%: Html.DropDownListFor(
            model => model.FieldTypeID,
            (SelectList)ViewData["FieldTypesList"]
            )%>
    <%:Model.FieldTypeID.ToString() %>

Однако ... генерируемый HTML-код показывает следующее:

<select id="Stream2FieldTypes_0_" name="Stream2FieldTypes[0]"><option value="1">Text Area</option>
    <option value="2">Text Box</option>
    <option value="3">Rich Text</option>
    <option value="4">Image</option>
    <option value="5">DateTime</option>
    <option value="6">Decimal</option>
    <option value="7">Integer</option>
</select>
3 <!--FYI: current value-->

Мне совершенно не хватает, почему представление не отображает HTML, который выбирает 3 (Rich Text).

Ребята, вы видите что-то не так с моим мыслительным процессом?

Ответы [ 3 ]

2 голосов
/ 11 ноября 2010

Я думаю, вы забыли передать выбранное значение конструктору

ViewData["FieldTypesList"] = new SelectList(
    genesisRepository.FieldTypes, "ftID", "ftName", myModel.FileTypeID)
);
1 голос
/ 11 ноября 2010

Спасибо @hunter и @John_Hartstock за указание на экземпляр selectlist, а не за фокус на метод DropDownListFor ().

Я решил проблему, создав список выбора в представлении вместо элемента управления. Контроллер был отредактирован по этому адресу:

ViewData["FieldTypesList"] = genesisRepository.FieldTypes;
// Returns IEnumerable of FieldTypes

Изменено представление на это:

<%: Html.DropDownListFor(
            model => model.FieldTypeID, 
            new SelectList((IEnumerable<FieldTypes>)ViewData["FieldTypesList"],
            "ftID",
            "ftName",
            Model.FieldTypeID ))
%>

Это отлично работает.

1 голос
/ 11 ноября 2010

Вы можете справиться с этим в вашем контроллере с перегрузкой SelectList Constructor

    ViewData["FieldTypesList"] = new SelectList(
        genesisRepository.FieldTypes, "ftID", "ftName"
        new (ftID=3, ftName="Rich Text");
...