使用值填充的下拉列表
本文关键字:下拉列表 填充 | 更新日期: 2023-09-27 17:58:56
我是MVC的初学者,正在尝试用值填充DropDownListFor
标记。
以下是我现在发现的帮助我构建代码的东西:
http://forums.asp.net/t/1705047.aspx/1
因此,在我的控制器中,现在有两个类,主类(ObjController : Controller)
和我按照上面的例子组成的另一个类。
另一个类看起来是这样的:
public class ItemCostViewModel
{
public int Id { get; set; }
[Required]
[Display(Name = "Item Cost :")]
public string ItemCostCode { get; set; }
public IEnumerable<ItemCostViewModel> GetItemCosts()
{
return new List<ItemCostViewModel>
{
new ItemCostViewModel() {Id = 1, ItemCostCode = "One"},
new ItemCostViewModel() {Id = 2, ItemCostCode = "Two"},
new ItemCostViewModel() {Id = 3, ItemCostCode = "Three"},
new ItemCostViewModel() {Id = 4, ItemCostCode = "Four"},
new ItemCostViewModel() {Id = 5, ItemCostCode = "Five"},
new ItemCostViewModel() {Id = 6, ItemCostCode = "Six"}
};
}
}
因此,这里的目标是用显示"一"的值填充DropDownListFor
,但我可以从中引用控制器代码中的id。我的想法是,如果用户选择"一",我会得到一个1的整数值,我可以相应地处理它。
我在.cshtlm视图中尝试过这行代码:
@Html.DropDownListFor(m => m.ItemCostCode , new SelectList(new Project1.Controllers.ItemCostViewModel().GetItemCosts(), "Id", "ItemCostCode"))
但遗憾的是,由于ItemCostCode
不在控制器中,它引发了崩溃:
Compiler Error Message: CS1061:'System.Collections.Generic.IEnumerable<Project1.Models.ObjectInfo>' does not containt a definition for "ItemCostCode" (...)
我很困惑,我不确定我现在在做什么,以及如何做。有人能帮我解释一下哪里出了问题,和/或如何纠正吗?
非常感谢!
以下是我建议您解决问题的方法:
1) 将该GetItemCosts()
方法的签名更改为返回List。不管怎样,你都在做,在接下来的步骤中会更容易。
2) 在控制器中设置以下内容(使用您所做的任何操作来调用GetItemCosts()
):
var itemCodeList = new List<DropDownItem>();
GetItemCosts().ForEach(ic => itemCodeList.Add(new DropDownItem { Value = ic.ID, Text = ic.ItemCostCode} );
ViewData["ItemCodes"] = itemCodeList;
3) 视图中的行现在应该能够看起来如下:
@Html.DropDownListFor(m => m.ItemCostCode , ((IEnumerable<DropDownItem)(ViewData["ItemCodes"])))
好的,最后,我必须承认你们都是对的。
以下是我所做的比我所做代码简单得多的事情:
在我的控制器中,我创建了一个字典,我将其归因于ViewBag
,如下所示:
Dictionary<string, int> dictObjCost = new Dictionary<string, int>
{
{"One", 1},
{"Two", 2},
{"Three", 3},
{"Four", 4},
{"Five", 5},
{"Six", 6}
};
ViewBag.itemCostValue = new SelectList(dictObjCost, "Value", "Key");
并且在.cshtml
:中
Item Cost : @Html.DropDownList("itemCostValue ", String.Empty)
所以现在我的值显示为"一","二"等等
当我得到视图时,我传递"int? itemCostValue
"参数,一切都很完美。
感谢大家让我意识到我在做什么:)