Мое предложение немного отличается от приведенного выше.
Где-то у вас должна быть базовая модель или базовый контроллер (модель лучше подходит для моего решения).
В этом классе используйте метод, подобный этому
public static SelectList MakeSelectListStatus(IEnumerable Coll, bool emptyElem = true)
{
List<SelectListItem> Items = new List<SelectListItem>();
if (emptyElem)
Items.Add((new SelectListItem { Text = " ", Value = "-1" }));
foreach (var Elem in Coll)
{
SelectListItem AddMe = new SelectListItem();
AddMe.Text = Elem.Descr;
AddMe.Value = Elem.ID.ToString();
Items.Add(AddMe);
}
SelectList Res = new SelectList(Items, "Value", "Text");
return Res;
}
Тогда в ваших взглядах просто используйте:
@Html.DropDownListFor(m => m.id, BaseModel.MakeSelectListStatus(Model.Statuses, false), new { id = "Statuses" })
Два больших преимущества в этом методе:
1. у вас нигде нет волшебных строк HTML
2. если ваши коллекции спроектированы правильно, у вас может быть один метод для создания экземпляров каждого списка выбора
Основным недостатком является наличие базовой модели, но ее можно легко решить с помощью статического класса где-то.
Однако, если вам кажется, что иметь помощника лучше для вас, я предлагаю вам иметь помощника, возвращающего объект SelectList, а не HTML-разметки, точно не знаю почему, но я считаю его более универсальным.
НТН