Альтернативный способ заполнить выбранное значение в HTML.Dropdownlist для MVC3.0 - PullRequest
0 голосов
/ 18 августа 2011

В приведенном ниже коде, хотя model.Title содержит правильное выбранное значение, его значение не устанавливается в ddl с идентификатором 'Title'.

Могу ли я установить выбранное значение любым другим способом? (как в документе готово?)

    <td> 
@Html.DropDownListFor(model => model.Title, Model.TitleList, !Model.IsTitleEditable ? (object)new { id = "Title", @disabled = "disabled", @style = "width:250px;" } : (object)new { id = "Title", @style = "width:250px" })
</td>

В моем контроллере список выбора заполняется, как показано ниже:

model.TitleList = new SelectList(GetAllTitles(), "Code","Value"); 

В этом случае, когда я использую другой перегруженный метод, как установить свойство selectedValue для этого списка selectList?

Ответы [ 3 ]

3 голосов
/ 18 августа 2011

Если , то вы создаете model.TitleList в качестве IEnumerable , где вы устанавливаете для Text значение Value из SelectListItems и model.Value - одно из значений SelectListItems затем все должно работать. Итак:

model.TitleList = GetAllTitles()
            .ToList()
            .Select(i => new SelectListItem { 
                                Value = i.Id.ToString(),
                                Text = i.Description });

model.Title = 5;

и в вашем представлении:

<td> 
@Html.DropDownListFor(model => model.Title, 
                      Model.TitleList, 
                      !Model.IsTitleEditable 
                         ? (object)new { @disabled = "disabled", @style = "width:250px;" } 
                         : (object)new { @style = "width:250px" })
</td>

Обратите внимание, что id = "Title" не обязательно в HtmlAttributes, помощник создаст для вас Id.

EDIT Существует некоторая путаница относительно свойства Selected на SelectListItem. НЕ используется при использовании DropDownListFor, он используется только в DropDownList. Таким образом, для DropDownListFor вы устанавливаете для свойства вашей модели значение, которое вы хотите выбрать (model.Title = 5;, упомянутый выше).

1 голос
/ 18 августа 2011

Лично мне нравится иметь статический класс, такой как:

public static class SelectLists 
{
    public static IList<SelectListItem> Titles(int selected = -1) 
    {
        return GetAllTitles()
            .Select(x => new SelectListItem  { 
                    Value = x.Id.ToString(), 
                    Text = x.Description, 
                    Selected = x.Id == selected
                }).ToList();
    }
}

А потом в моих взглядах:

@Html.DropDownListFor(x => x.Title, SelectLists.Titles(Model.Title), !Model.IsTitleEditable ? (object)new { id = "Title", @disabled = "disabled", @style = "width:250px;" } : (object)new { id = "Title", @style = "width:250px" });

Все мои списки выбора находятся в этом классе, если бы их было слишком много, я бы разделился в разных классах.

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

1 голос
/ 18 августа 2011

Если Model.TitleList является SelectList, вы можете указать выбранное значение при заполнении SelectList во время создания модели. Как иллюстрация:

var model = new MyViewModel();
var domainEntity = GetMyDomainEntity(id);

// Create a selectlist using all your titles and specifying the Title value of the item
// you're viewing as the selected item. See parameter options if you're not supplying
// an object as the selected item value
model.TitleList = new SelectList(GetAllTitles(), domainEntity.Title)

Тогда вы просто сделаете свой Html.DropDownListFor в своем представлении.

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