我有一个成功渲染的视图,下拉列表已填充。
List<SelectListItem> listBuildings = new List<SelectListItem>(context.Buildings.Select(b => new SelectListItem { Value = b.ID.ToString(), Text = b.BuildingName, }).ToList());
SelectListItem buildingZeroItem = new SelectListItem() { Value = "0", Text = "Select Building" };
listBuildings.Add(buildingZeroItem);
model.Building = listBuildings;
它在浏览器中正确显示。然后我将表单提交到这样的帖子
@using (Html.BeginForm("Booking", "Common", FormMethod.Post))
{
<div class="col-md-6">
@Html.LabelFor(m => m.Building)
@Html.DropDownListFor(m => m.Building, Model.Building, new { @class = "form-control", @style = "width:100%;" })
</div>
}
这是控制器中的帖子......
[HttpPost]
public ActionResult Booking( BookingViewModel model)
{
var myVals= model.Building
}
模型中没有任何东西。建筑。我在这里错过了一些非常严肃的事情。我有附带的文本字段,它们的值被传递。它只是帮助器值的下拉列表,我找不到。这是为了验证。我想知道是否有人可以给我一些关于我哪里出错的解释。谢谢。
答案 0 :(得分:2)
您需要在模型中声明一个属性,以指定DropDownList的selected元素的值,如下所示:
public IEnumerable<SelectListItem> Building { get; set; }
public int SelectedBuildingId { get; set; }
然后你需要在DropDownListFor声明中使用它:
@Html.DropDownListFor(m => m.SelectedBuildingId, Model.Building, new { @class = "form-control", @style = "width:100%;" })
您将获得该属性中所选元素的值