2

私は MVC の初心者で、DropDownListForタグに値を入力しようとしています。

これが私が今見つけたもので、コードを構築するのに少し役立ちました:

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

したがって、私のコントローラーには、メインクラス(ObjController : Controller)と上記の例に従って作成した別のクラスの2つのクラスがあります。

他のクラスは次のようになります。

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」を選択すると、整数値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

問題を解決するために、次のことをお勧めします。

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

だから今、私の値は「One」、「Two」などとして表示されます。

ビューを取得したら、「 」パラメーターを渡すint? itemCostValueと、すべてが完全に機能します。

私が何をしていたかを私に気づかせてくれてありがとう:)

于 2013-02-13T19:58:10.310 に答える