ОК, так что примерно через час в чате с 3nigma мы разобрались. Я поделюсь этим с вами, товарищи по программированию.
У меня было решение с 2 проектами. Один держит мой домен, а другой - приложение MVC3. В проекте Domain создайте папку с именем [Extensions] (убедитесь, что вы не пишете это как Extensions, как я это сделал: D) и добавьте класс с именем, относящимся к сущности, о которой идет речь. Я назвал добытым [LanguageEntityExtension]
Там последовал этот урок , и мой код выглядел так:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Web.WebPages.Html;
using PostssDomain.Entities;
namespace PostsDomain.Extensions
{
public static class LanguageEntityExtension
{
public static IEnumerable<SelectListItem> ToSelectListItems<T>(this IList<T> langeuageEntities) where T : Language
{
return ToSelectListItems((IEnumerator<Language>)langeuageEntities.GetEnumerator());
}
public static IEnumerable<SelectListItem> ToSelectListItems(this IEnumerator<Language> langeuageEntities)
{
var items = new HashSet<SelectListItem>();
while (langeuageEntities.MoveNext())
{
var item = new SelectListItem();
var entity = langeuageEntities.Current;
item.Value = entity.Id.ToString();
item.Text = entity.Name.ToString();
items.Add(item);
}
return items;
}
}
}
Несколько вещей здесь, убедитесь, что вы не забыли слова [статические], а также убедитесь, что вы ссылаетесь (используя оператор) на библиотеку [System.Web.WebPages.Html; ] и не [System.Web.Mvc; ]. Возможно, вам придется добавить ссылку на [System.Web.WebPages.dll] вручную, щелкнув правой кнопкой мыши папку «Ссылки» и добавив ее таким образом.
Теперь в своем контроллере я добавил соответствующий оператор using [using PostsDomain.Extensions; ] и тогда я смог сделать следующее:
var langs = languagesRepository.Languages.ToList();
vm.Languages = langs.ToSelectListItems();
Где, как и раньше, у меня не было метода Extension. Вот и все. Затем в представлении, в котором отображается DropDownListFor, укажите его в следующем формате:
@Html.DropDownListFor(x => x.SelectedLanguageId, new SelectList(Model.Languages, "value", "text"))
Обратите внимание на «Значение» и «Текст».
Вот и все. Все работает отлично.
Еще раз спасибо 3nigma за помощь.