为什么我的下拉选择没有提交?

时间:2012-03-05 09:44:24

标签: asp.net-mvc razor drop-down-menu

提交表单时我有一个下拉列表,它被提交为null ...

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 :(得分:0)

您没有正确使用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会根据lambda自动为其指定HowOftenCar