gpt4 book ai didi

c# - Html.DropDownListFor绑定(bind)问题

转载 作者:太空狗 更新时间:2023-10-30 01:09:51 24 4
gpt4 key购买 nike

所以我有这两个表 - products, measurement_unit

产品:(id int, name varchar(20) , id_um INT ) 其中 id_um 是对 measurement_unit 表主键的引用,id 是该表的主键。

测量单位:(id_um int,名称 varchar(20))。 id_um 是主键我使用 LINQ to SQL 映射了两者。

当我想创建一个新产品时,我需要从一个单位测量列表中进行选择,这意味着一个带有他们名称的下拉列表,但我想绑定(bind)所选产品的 ID....

我在 Create 操作的 Controller 中执行此操作(创建新产品):

var items = new List<SelectListItem>();
foreach (var t in db.measurement_unit)
items.Add(new SelectListItem() { Text = t.name.ToString(), Value =t.id_um.ToString() });
ViewData["UM"] = new SelectList(items, "Value", "Text");

现在,对于 View :

<%: Html.DropDownListFor(model=>model.id_um,  (IEnumerable <SelectListItem>)ViewData["UM"])%>

但是我得到以下错误:

The ViewData item that has the key 'id_um' is of type 'System.Int32' but must be of type 'IEnumerable<SelectListItem>'.

我之前为这件事苦苦挣扎,之前我成功地让它工作了,但我不小心删除了那个项目。请告诉我我做错了什么?谢谢!

最佳答案

我建议您使用 View 模型而不是 ViewData。它将使代码更清晰/更安全/重构更友好/启用智能感知/更容易进行单元测试/魔术字符串免费/....:

public class MyViewModel
{
public int Id { get; set; }
public IEnumerable<SelectListItem> Items { get; set; }
}

Controller :

public class HomeController: Controller
{
public ActionResult Index()
{
var model = new MyViewModel
{
Items = db.measurement_unit.Select(x => new SelectListItem
{
Value = x.id_um.ToString(),
Text = x.name.ToString()
})
};
return View(model);
}
}

最后在强类型 View 中:

<%= Html.DropDownListFor(
x => x.Id,
new SelectList(Model.Items, "Value", "Text")
) %>

关于c# - Html.DropDownListFor绑定(bind)问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5963482/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com