我有个表单,里面有三个动态的下拉菜单,都是一对多的关系,一开始都是空的。当用户在第一下拉菜单选中一个value时,第二个下拉菜单动态加载对应的values,当用户在第二个下拉菜单选中某一value时,第三个下拉菜单会动态加载相应的values。
用户可以创建表单并submit。我的CreateController的GET 和 POST 都没有问题。
现在需要EditController来允许用户修改他所创建的表单。问题就出在如何得到下拉菜单已选定的item。
第一个下拉菜单的value是直接从model获取,所以第一个菜单可以显示已选定的item1。
但第二个下拉菜单就显示不出了。我需要首先加载所有跟item1相对应的所有items,并显示已选定的item2.
我用的是viewMOdel:
/// <summary>
/// Technique Selection
/// </summary>
public Nullable<int> Tech_ID { get; set; }
public string TechniqueName { get; set; }
public SelectList Techniques { get; set; }
/// <summary>
/// Business Unit Selection
/// </summary>
///
public Nullable<int> BU_ID { get; set; }
public string BuName { get; set; }
public SelectList BusinessUnits { get; set; }
我的EditController GET 方法:
//第一个菜单可以显示已选定的item
ViewBag.Bulist = new SelectList(AllBus, "BU_ID", "BU_Title", form.BU_ID);
///第二个下拉菜单就显示不出了
var butechList = GetTechList(Convert.ToInt32(form.BU_ID));
IEnumerable<SelectListItem> butechs = butechList.Select(m => new SelectListItem()
{
Value = m.Tech_ID.ToString(),
Text = m.Technique.Tech_Title
});
ViewBag.Techlist = new SelectList(butechs, "Tech_ID", "Tech_Title", form.Tech_ID);
我的View page:
第一个菜单可以显示已选定的item:
@Html.DropDownListFor(model => model.BU_ID, new SelectList((IEnumerable<SelectListItem>)@ViewBag.Bulist, "Value", "Text",
Model.BU_ID),
new
{
id = "ddlBU"
})
第二个下拉菜单就显示不出了:
@Html.DropDownListFor(model => model.Tech_ID, new SelectList((IEnumerable<SelectListItem>)@ViewBag.Techlist, "Value", "Text",
Model.Tech_ID),
new
{
id = "ddlTechs"
})
@Html.DropDownList("Bulist")
@Html.DropDownList("Techlist")
谢大哥 但是用DropDownList不能跟模型绑定啊,只能用DropDownListFor
@nechnay: 我试了下,换成强类型的××For也一样可以得
form.Techniques = new SelectList(techlist, "Tech_ID", "Tech_Title");
form.LeadEngineers = new SelectList(leadlist, "User_ID", "fullName");
In view page:
@Html.DropDownListFor(model => model.Tech_ID, Model.Techniques)
@Html.DropDownListFor(model => model.UserLead_ID, Model.LeadEngineers)