【发布时间】:2016-01-14 08:15:42
【问题描述】:
我有一个表单,其中包括三个动态下拉列表。它们都是一对多的关系。第一个下拉列表已加载值,另外两个在开始时为空。当用户从第一个下拉列表中选择一个值时,第二个下拉列表将加载相应的项目;当用户从第二个下拉列表中选择一个值时,第三个下拉列表将加载相关项目。
用户可以创建表单并提交。我的 CreateController GET 和 POST 方法运行良好。
现在我需要 EditController 来允许用户编辑他的表单。问题是如何显示具有选定值的第二和第三动态下拉列表?
在我的视图模型中:
public Nullable<int> Tech_ID { get; set; }
public string TechniqueName { get; set; }
public SelectList Techniques { get; set; }
public Nullable<int> BU_ID { get; set; }
public string BuName { get; set; }
public SelectList BusinessUnits { get; set; }
在我的编辑控制器中:
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);
在查看页面中:
@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" })
第一个下拉列表工作正常,但第二个没有。
【问题讨论】:
-
你有什么问题?当您有视图模型时,为什么要使用
ViewBag?当ViewBag属性已经是SelectList时,为什么还要在视图中创建第二个SelectList -
您可能还想查看this DotNetFiddle 中的代码以实现级联下拉列表。
-
非常感谢您的建议。我尝试在控制器中使用 viewmodel 而不是 viewbag,并像这样更改了视图页面:
-
` @Html.DropDownListFor(model => model.Tech_ID, Model.Techniques), new { id = "ddlTechs" })`
-
但仍然出现同样的错误:DataBinding:“System.Web.Mvc.SelectListItem”不包含名为“Tech_ID”的属性。抱歉,多次提交消息,我不知道按 Enter = 提交评论 ...
标签: c# asp.net asp.net-mvc asp.net-mvc-4 dropdownlistfor