我是MVC的初学者,正在尝试用值填充DropDownListFor标记。

这是我现在发现的内容,这些内容对我构造代码有所帮助:

http://forums.asp.net/t/1705047.aspx/1

因此,在我的控制器中,现在有2个类,主类(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()方法的签名更改为返回列表。无论如何,您都在做,随后的步骤会更容易。

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"])))

09-19 16:44