0

私は MVC3 を学習していますが、ドロップダウン リストに入力する方法が見つかりません。StackOverFlow の例を試してみましたが、機能しませんでした。Web で見つけたプロジェクトから試してみましたが、うまくいきません。Youtubeでこの男のチュートリアルを見つけたところ、次のエラーが表示されました。

キー「Categ」を持つタイプ「IEnumerable」の ViewData アイテムはありません。

そして今、私は選択肢がありません。

これは、list(私が思うに)の値を取得する場所です:

public class Cat
{
    DataBaseContext db;

    public IEnumerable<MyCategory> Categories()
    {
        db = new DataBaseContext();
        List<MyCategory> categories = (from b in db.BookCategory
                                       select new MyCategory { name = b.Name, id = b.ID }).ToList();

        if (categories != null)
        {
            var ocategories = from ct in categories
                              orderby ct.id
                              select ct;
            return ocategories;
        }
        else return null;

    }
}

public class MyCategory
{
    public string name { get; set; }
    public int id { get;set;}
}

これは次のControllerとおりです。

// GET: /Entity/Create

    public ActionResult Create()
    {
        return View();
    }


 [HttpPost]
    public ActionResult Create(BookEntity ent)
    {
        Cat ca= new Cat();

        IEnumerable<SelectListItem> items = ca.Categories().Select(c => new SelectListItem
        {
            Text = c.name,
            Value = c.id.ToString()
        });
        ViewBag.Categ = items;


        db.BookEntity.Add(ent);
        db.SaveChanges();
        return RedirectToAction("Index");
    }

そして、これは次のViewとおりです。

<div class="editor-field">
        @Html.DropDownList("Categ"," Select One ")

    </div>

どういうわけか、私にはうまくいきません。助けやアドバイスをいただければ幸いです。

4

1 に答える 1

1

ViewBag の代わりに ViewData を使用するようにアクション メソッドを変更すると、View マークアップが機能します。

public ActionResult Create()
    {
        Cat ca= new Cat();

        IEnumerable<SelectListItem> items = ca.Categories().Select(c => new SelectListItem
        {
            Text = c.name,
            Value = c.id.ToString()
        });
        ViewData["Categ"] = items;

        return View("Index");
    }

[HttpPost]
public ActionResult Create(BookEntity ent)
    {   
        db.BookEntity.Add(ent);
        db.SaveChanges();
        return RedirectToAction("Index");
    }

POST アクションではなく、GET アクションで ViewData を設定する必要があります。ドロップダウン リストに Categ という名前を付けることで、MVC 規則も ViewData コンテナーを自動的に検索します。

于 2013-01-15T23:42:41.237 に答える