我需要能够显示各个不同位置的某些项目的下拉列表...我可以放心地认为,考虑到它是一个下拉列表,它将始终用于表单的上下文中,因此名称标签将总是需要的。但是我想知道这类问题的最佳做法是什么。
我在局部视图中有以下内容,您可以看到我已明确设置name =“Name”,此时此刻正确地将映射到项目Class属性:
@model IEnumerable<TEST.Domain.Entities.James>
@{
Layout = "";
}
<select name="Name" id="JamesDropdownList">
@foreach (var item in Model)
{
<option value="@item.JamesID">@item.Name</option>
}
</select>
然后我可以在这样的背景下使用这个局部视图:
@using (Html.BeginForm("LoadInformation", "James"))
{
<div class="col-lg-9 remove-padding-left">
@{ Html.RenderAction("DropdownList", "James"); } // This is the partial view being used in a form
</div>
<div class="col-lg-3 remove-padding-right">
@Html.ContinueButton("Continue") // This is a custom button html helper I have created
</div>
}
所以问题是,这绝对没问题,要明确声明这个选择字段的名称是“Name”还是有一些特殊聪明的razorey方法呢?
修改
事实上,我不是必须要做@ Html.Hidden(“JamesID”,item.JamesID)或其他选择吗?因此,当我提交该表单时,它将JamesID推送到控制器,如下所示:
[HttpPost]
public ViewResult LoadInformation(int jamesID)
{
// Do something with jamesID
return View("LoadInformation");
}
你可以看到我有点困惑......
也许更好的问题是,我如何拥有一个可重复使用的下拉列表,我可以在一个表格中使用该表格,该表格要求该下拉列表中的JamesID作为接收控制器的参数之一?
答案 0 :(得分:1)
一种可行的方式是:
@Html.DropDownList("JamesDropdownList", new SelectList(Model,"JamesID","Name"))
这会将JamesDropdownList
分配给下拉列表的name
和id
属性。