【问题标题】:DropDownListFor not selecting the right value on an Edit screenDropDownListFor 没有在编辑屏幕上选择正确的值
【发布时间】:2016-01-21 16:59:48
【问题描述】:

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

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

我之前使用过 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的使用方向不对,我觉得需要给Model添加属性来表示下拉列表的选中值
  • 也请发ItemInfo类
  • 已添加模型/类。

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


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-11-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多