我正在使用表单的下拉列表。当我创建表单时,它可以正常工作并保存。但是当我将其加载到“编辑”屏幕时,默认情况下未选择正确的选项。相反,第一个选项正在被选中。
我在View中的一行放置一个断点,以查看该属性的id / value是否正确,它是什么。我只是不确定View中的代码是否错误或者我是如何通过控制器的。
之前我使用过DropDownList并且工作正常,但出于验证目的,我切换到了DropDownListFor,我立即遇到了这个问题。
查看(编辑)
@Html.DropDownListFor(model => model.Item_ID, (SelectList)ViewBag.Item_ID, new { @class = "form-control" })
控制器
List<ItemInfo> itemIDItems = dbContext.Items.OrderBy(item => item.Item_Title).ToList<ItemInfo>();
ViewBag.Item_ID = new SelectList(itemIDItems, "Item_ID", "Item_Title", object.Item_ID);
模型(对象,通过EF生成)
public int Obj_ID { get; set; }
...
public Nullable<int> Item_ID { get; set; }
...
public virtual Items Items { get; set; }
模型(通过EF生成的项目)
public int Item_ID { get; set; }
public string Item_Title { get; set; }
答案 0 :(得分:0)
您需要更改ViewBag
属性的名称,使其与您绑定的属性的名称不匹配。例如,你的GET方法应该是
var model = // get your existing model
List<ItemInfo> itemIDItems = dbContext.Items.OrderBy(item => item.Item_Title).ToList<ItemInfo>();
ViewBag.ItemList = new SelectList(itemIDItems, "Item_ID", "Item_Title");
return View(model);
请注意,SelectList
构造函数的第4个参数是不必要的(它被DropDownListFor()
方法忽略),因为它绑定到的属性值决定了哪个选项被选中
视图将是
@Html.DropDownListFor(m => m.Item_ID, (SelectList)ViewBag.ItemList, new { @class = "form-control" })
如果Item_ID
的值与其中一个选项的值匹配,则会选择该选项。