Ошибка привязки данных с DropDownListFor в ASP.NET MVC 3? - PullRequest
3 голосов
/ 17 января 2012

У меня есть таблица базы данных под названием Genre со следующими полями:

  • Id (первичный ключ для заполнения)
  • Name (название жанра - роман, вестерн и т. Д.))

У меня есть класс Model с именем GenreDropDownModel, который содержит следующий код:

public class GenreDropDownModel
{
    private StoryDBEntities storyDB = new StoryDBEntities();

    public Dictionary<int,string> genres { get; set; }

    public GenreDropDownModel()
    {
        genres = new Dictionary<int,string>();

        foreach (var genre in storyDB.Genres)
        {
            genres.Add(genre.Id, genre.Name);
        }
    }

}

Мой контроллер Write Действие объявлено как:

  public ActionResult Write()
  {
      return View(new GenreDropDownModel());
  }

Наконец, в моем представлении Write.cshtml я получаю следующую ошибку:

Привязка данных: 'System.Collections.Generic.KeyValuePair`2 [[System.Int32, mscorlib, Версия = 4.0.0.0,Культура = нейтральная, PublicKeyToken = b77a5c561934e089], [System.String, mscorlib, Версия = 4.0.0.0, Культура = нейтральная, PublicKeyToken = b77a5c561934e089]] 'не содержит свойства с именем «Id».

@model Stories.Models.GenreDropDownModel

@{
    ViewBag.Title = "Write";
}

<h2>Write</h2>

@Html.DropDownListFor(model => model.genres,new SelectList(Model.genres,"Id","Name"))

1 Ответ

7 голосов
/ 17 января 2012

Поскольку Model.genres является словарем, вы должны сделать это с помощью

@Html.DropDownListFor(model => model.genres,new SelectList(Model.genres,"Key","Value"))

Это потому, что при перечислении IDictionary<TKey, TValue> производит перечисление KeyValuePair<TKey, TValue>.Это тип, на который вам нужно посмотреть, чтобы увидеть, как называются свойства.

...