Нет элемента ViewData типа «IEnumerable <SelectListItem>», который имеет ключ «Профессия» - PullRequest
7 голосов
/ 09 марта 2011

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

На странице просмотра:

<%: Html.DropDownListFor(m => m.Profession, (IEnumerable<SelectListItem>)ViewData["ProfessionList"])%>                   
<%: Html.ValidationMessageFor(m => m.Profession)%> 

В модельном классе:

[Required]
[DisplayName("Profession")]
public string Profession { get; set; } 

А в контроллере:

ViewData["ProfessionList"] =
                new SelectList(new[] { "Prof1", "Prof2", "Prof3", "Prof4", "Prof5"}
                .Select(x => new { value = x, text = x }),
                "value", "text");

И я получаю сообщение об ошибке: нет элемента ViewData типа 'IEnumerable', который имеет ключ 'Profession'.

Что я могу сделать, чтобы это работало?

Ответы [ 2 ]

12 голосов
/ 09 марта 2011

Я бы рекомендовал использовать модели представления вместо ViewData.Итак:

public class MyViewModel
{
    [Required]
    [DisplayName("Profession")]
    public string Profession { get; set; } 

    public IEnumerable<SelectListItem> ProfessionList { get; set; }
}

и в вашем контроллере:

public ActionResult Index()
{
    var professions = new[] { "Prof1", "Prof2", "Prof3", "Prof4", "Prof5" }
         .Select(x => new SelectListItem { Value = x, Text = x });
    var model = new MyViewModel
    {
        ProfessionList = new SelectList(professions, "Value", "Text")
    };
    return View(model);
}

и на ваш взгляд:

<%: Html.DropDownListFor(m => m.Profession, Model.ProfessionList) %>
<%: Html.ValidationMessageFor(m => m.Profession) %>
8 голосов
/ 09 марта 2011

Вы можете просто определить SelectList в вашем представлении следующим образом:

<%: Html.DropDownListFor(m => m.Profession, new SelectList(new string[] {"Prof1", "Prof2", "Prof3", "Prof4", "Prof5"}, "Prof1"))%>
                <%: Html.ValidationMessageFor(m => m.Profession)%>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...