DropDownList不在编辑屏幕上选择正确的值

时间:2016-01-21 16:59:49

标签: asp.net-mvc-5 html-helper html.dropdownlistfor

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

我在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; }

1 个答案:

答案 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的值与其中一个选项的值匹配,则会选择该选项。