我已经浏览了很多帖子和一些关于如何在MVC和Razor中创建下拉列表的示例,而不是很清楚我的问题。
基本上我有这行代码可以创建我的下拉列表
@Html.DropDownListFor(model => model.MarketSegmentID,
new SelectList(""),
new { @class = "dropdownList"})
然后使用JQuery,我用控制器中的值填充下拉列表
然后我发布我的表单,下拉菜单中的选定值会正确显示。
我遇到的问题是当我打开表单备份时,我无法从模型中获取我保存的值以显示为所选值。
为了好玩,我添加了这行代码,它显示了我保存的值。
@Html.EditorFor(model => model.MarketSegmentID)
任何想法我做错了什么?
答案 0 :(得分:0)
除非您真正需要填充SelectList客户端,否则最好将您的SelectList值直接放入控制器中的ViewBag.MarketSegmentId
属性中并使用:
@Html.DropDownListFor(model => model.MarketSegmentID)
甚至只是
@Html.DropDownList("MarketSegmentID")
在控制器中你会有这样的东西(根据你自己的数据而变化):
ViewBag.MarketSegmentID = new SelectList(someDataList, "ValueProperty", "NameProperty");
someDataList
可以是任何集合(例如数据库表,列表等)。 “ValueProperty”是数据中包含要存储的值的属性的名称(通常是int值)。 “NameProperty”是数据中属性的名称,用于保存要在每个项目上显示的文本。
假设您想要一个按顺序生成的简单整数列表,您可以将它们添加到这样的循环中:
List<int> ints = new List<int>();
for (int i = 0; i < 100; i++)
{
ints.Add(i);
}
ViewBag.MarketSegmentID = new SelectList(ints);
如果SelectList
构造函数中没有指定属性名称,它将只使用集合中的元素来显示和值。
MVC将自动在与模型属性同名的SelectList
属性中查找ViewBag
。例如假设Model.MarketSegmentID
为选定值,并假设ViewBag.MarketSegmentID
保留匹配的SelectList
当页面显示时,它还会从视图模型中填充当前选择,并从列表中的选择更新返回的视图模型值。
如果您描述数据类型,我可以更新它以显示在控制器中填充SelectList的具体示例。
答案 1 :(得分:0)
这就是我用来做的事情:
剃刀:
@Html.DropDownListFor(m => m.MarketSegmentID , Model.GetMarketSegmentList, new { @class = "form-control" })
视图模型:
public int? MarketSegmentID { get; set; }
public List<SelectListItem> GetMarketSegmentList { get; set; }
控制器:
var vm = new ViewModelWhatever();
[..]
vm.GetMarketSegmentList = GetMarketSegmentList()
.ToList()
.Select(x => new SelectListItem()
{
Value = x.MarketSegmentID.ToString(),
Text = x.Name
})
.ToList();