0

我正在学习 MVC3,但找不到一种可以填充下拉列表的方法。尝试过 StackOverFlow 的示例,但不起作用。从我在网上找到的一个项目中尝试过,但它不起作用。在 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

修改您的操作方法以使用 ViewData 而不是 ViewBag 并且 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");
    }

您需要在 GET 操作而不是 POST 操作中填充 ViewData。通过命名下拉列表类别以及 MVC 约定将自动查看 ViewData 容器。

于 2013-01-15T23:42:41.237 回答