почему мой раскрывающийся список не представлен? - PullRequest
0 голосов
/ 05 марта 2012

У меня есть раскрывающийся список, когда форма отправляется, она отправляется пустым ...

html:

@Html.DropDownListFor(c => Model.HowOftenCar, Model.HowOftenCar, new { id = "CompDrop" })

Модель:

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

Контроллер:

IList<string> HowOftenCar = new List<string>();
HowOftenCar.Insert(0, "More than once a week");
HowOftenCar.Insert(1, "Once a month");
HowOftenCar.Insert(2, "Once a year");
model.HowOftenCar = HowOftenCar.Select(c => new SelectListItem()
{
  Text = c,
  Value = c
});

Сообщение:

 [HttpPost]
 public ActionResult Index(Competition model)
 {
    if (ModelState.IsValid)
    {}
 }

Я тоже пробовал ...

 @Html.DropDownListFor(c => Model.HowOftenCar, new SelectList(Model.HowOftenCar, "Value","Text"), new { id = "CompDrop" })

1 Ответ

0 голосов
/ 06 марта 2012

Вы неправильно используете DropDownListFor.

Первый параметр - это свойство модели, которую вы хотите заполнить.Если вы хотите заполнить свойство HowOftenCar в модели, оно должно иметь тип значения - в этом случае оно выглядит как строка.

public string HowOftenCar { get; set; }

Вторым параметром является список вариантов.Вы правильно поняли, но это должно быть нечто иное, чем свойство, которое вы пытаетесь установить.

IList<string> HowOftenCarChoices = new List<string>
{
    "More than once a week", 
    "Once a month",
    "Once a year"
};

model.HowOftenCarChoices = HowOftenCar.Select(c => new SelectListItem()
{
    Text = c,
    Value = c
});

Итак, в итоге вы получите

@Html.DropDownListFor(m => m.HowOftenCar, Model.HowOftenCarChoices)

Обратите внимание, что вам не нужно свойство id, потому что DropDownListFor автоматически даст ему идентификатор HowOftenCar на основе лямбды.

...