DropDownListFor 未在编辑屏幕上选择正确的值

DropDownListFor not selecting the right value on an Edit screen

我正在为表单使用下拉列表。当我创建表单时,它可以正常工作并保存。但是当我将它加载到编辑屏幕时,默认情况下没有选择正确的选项。相反,正在选择第一个选项。

我在视图中的行中放置了一个断点,以查看 属性 的 id/value 是否正确,确实如此。我只是不确定是视图中的代码有误还是我如何通过控制器传递代码。

我之前使用 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; }

您需要更改 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 的值与其中一个选项的值匹配,则将选择该选项。