我需要绑定可变数量的下拉列表,我该如何实现?
在我的项目中,到目前为止我只需要处理绑定到已知数量的下拉列表。为此,我简单地完成了以下操作:
视图模型
//for staff ddl
public List<Staff> Staff { get; set;
public int? SelectedStaffId { get; set; }
public IEnumerable<System.Web.Mvc.SelectListItem> StaffItems
{
get { return new System.Web.Mvc.SelectList(Staff, "StaffID", "FirstName"); }
}//end
视图
@Html.DropDownListFor(m => m.SelectedStaffId, Model.StaffItems, "--Who is taking appointment--", new { @class = "form-control", @id = "ddlValuer" })
现在我想绑定可变数量的下拉列表。我期望实现这个将是一个简单的循环,如下所示:(但是这样做&#39;工作)
视图模型
//for offerState ddl
public List<OfferState> OfferStates { get; set; }
public int? SelectedOfferStateId { get; set; }
public IEnumerable<System.Web.Mvc.SelectListItem> OfferStateItems
{
get { return new System.Web.Mvc.SelectList(OfferStates, "OfferStateID", "Description"); }
}//end
查看
for (var i = 0; i < Model.Offers.Count; i++)
{
<div class="row">
<div class="col-lg-4">@Html.TextBoxFor(m => Model.Offers[i].Offer1, null, new { @class = "form-control", @disabled = "disabled" })</div>
<div class="col-lg-8">@Html.DropDownListFor(m => Model.Offers[i].OfferStateID, Model.OfferStateItems, "--State--", new { @class = "form-control" })</div>
</div>
}
从不选择项目 - 始终显示--state--(默认文本)。我已经逐步完成了代码,可以看到有三个带有OfferStateID的项目。
为什么始终选择默认值?还有更好的方法吗?
答案 0 :(得分:1)
这是在循环中使用DropDownListFor()
的已知限制。您需要在每次迭代中构建新的SelectList
,或使用EditorTemplate
并将SelectList
作为AdditionalViewData
for (var i = 0; i < Model.Offers.Count; i++)
{
@Html.DropDownListFor(m => m.Offers[i].OfferStateID, new SelectList(Model.OfferStateItems, "OfferStateID", "Description", Model.Offers[i].OfferStateID), "--State--", new { @class = "form-control" })
}
其中OfferStateItems
为IEnumerable<OfferStates>
(不是SelectList
)
答案 1 :(得分:0)
在你的模型中只需更改:
public IEnumerable<System.Web.Mvc.SelectListItem> OfferStateItems
{
get { return new System.Web.Mvc.SelectList(OfferStates, "OfferStateID", "Description"); }
}//end
到此
public List<OfferStates> OfferStateItems{get;set;}
然后为ModelView
创建一个构造函数public yourViewModel()
{
this.OfferStateItems=(place here the method to populate the list)
}
然后您可以将该列表与您需要的项目一起使用,并使用HTML帮助程序来编写项目。