gpt4 book ai didi

c# - MVC - 没有具有类型为 'IEnumerable' 的键的 View 数据项

转载 作者:行者123 更新时间:2023-11-30 21:22:46 25 4
gpt4 key购买 nike

我是 MVC 和 ASP.NET 的新手,希望学习一些东西,所以我正在尝试制作一些简单的应用程序来学习来龙去脉。

好吧,我正在尝试让一个下拉框显示一个图书列表,它会在其中显示图书的标题,但会发布 book_id [主键]

我得到的错误是:没有带有“IEnumerable”类型键“book_id”的 ViewData 项。

这是我的看法:

    <p>
<label for="book_id">Book:</label>

<%= Html.DropDownList("book_id" , (IEnumerable<SelectListItem>)ViewData["Books"]) %>
<%= Html.ValidationMessage("book_id", "*") %>
</p>

这是我的 Controller 里的内容

        // GET: /Home/Create
//This is the form creation.
[Authorize]
public ActionResult Create()
{
this.ViewData["Books"] =
new SelectList(_entities.BookSet.ToList(), "book_id", "Title");
return View();
}

//
// POST: /Home/Create
//This sends it to the DB
[AcceptVerbs(HttpVerbs.Post) , Authorize]
public ActionResult Create([Bind(Exclude="problem_id")] Problem inProblem)
{
try
{
// TODO: Add insert logic here
Models.User user = getUser(User.Identity.Name);
if (user != null)
{
inProblem.user_id = user.user_id;
}
_entities.AddToProblemSet(inProblem);
_entities.SaveChanges();

return RedirectToAction("Index");
}
catch
{
return View();
}
}

我的 Books 表看起来像这样

        book_id
title
publisher
language
isbn

我假设这是一个微不足道的新手错误;但我没有多少运气来解决这个问题。任何帮助都会很棒

最佳答案

更简单的解决方案是将 ViewData 元素命名为与下拉列表相同的名称:

this.ViewData["book_id"] = new SelectList(_entities.BookSet.ToList(), "book_id", "Title"); 

这将自动绑定(bind):

<%= Html.DropDownList("book_id") %>

如果您想再次显示 View (就像在 catch 中所做的那样),您还需要在 Create 的 Post 版本中填充 ViewData["book_id"]。

[AcceptVerbs(HttpVerbs.Post) , Authorize] 
public ActionResult Create([Bind(Exclude="problem_id")] Problem inProblem)
{
try
{
// TODO: Add insert logic here
Models.User user = getUser(User.Identity.Name);
if (user != null)
{
inProblem.user_id = user.user_id;
}
_entities.AddToProblemSet(inProblem);
_entities.SaveChanges();

return RedirectToAction("Index");
}
catch
{
this.ViewData["Books"] = new SelectList(_entities.BookSet.ToList(), "book_id", "Title");
// ViewData["book_id"] with example above.

return View();
}
}

注意:上面的 this.ViewData["Books"] 确实应该在 catch 中完成 - 它只是为了演示缺少的内容。

关于c# - MVC - 没有具有类型为 'IEnumerable<SelectListItem>' 的键的 View 数据项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2129675/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com