2

我是 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用显示“One”的值填充 a,但我可以从中引用控制器代码中的 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" (...)

我很困惑,我不确定我现在在做什么,以及如何做。任何人都可以帮我解释什么是错的,和/或如何纠正它?

非常感谢!

4

2 回答 2

1

好吧,最后,我必须承认你们都是对的。

这是我所做的,比我正在做的代码简单得多:

在我的控制器中,我创建了一个我归因于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' 参数并且一切正常。

谢谢大家让我意识到我在做什么:)

于 2013-02-13T19:58:10.310 回答
1

以下是我建议您解决问题的方法:

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"])))
于 2013-02-13T19:46:54.163 回答