MVC 视图 - 无法在选择下拉列表中填充列表
Posted
技术标签:
【中文标题】MVC 视图 - 无法在选择下拉列表中填充列表【英文标题】:MVC View-Unable to populate list in the select drop down 【发布时间】:2019-07-03 04:27:26 【问题描述】:我正在尝试在 剃须刀页面 中实现一个简单的选择下拉菜单。我不确定我是否遗漏了什么,下拉列表根本没有填充。仅出于演示目的,我使用硬编码的字符串值来填充下拉列表。
我有一个名为帖子的列表。
var posts = new List<BlogDetails>();
posts.Add(
new BlogDetails
Id = 1,
Author = "Charles",
Title = "Finding Charles",
Body = "This is a great blog post",
PostedOn = DateTime.Now
);
ViewBag.listOfItems = posts;
return View();
在Index.cshtml
中,我正在尝试使用此列表填充下拉列表。
<select asp-for="Id" asp-items="@(new SelectList(ViewBag.listOfItems, "Id", "Author"))">
<option>Please select one</option>
</select>
我不知道原因并且它不起作用。 当我实际查看为此下拉列表生成的 HTML 时,我可以看到该列表根本没有被处理。
下面是生成的 HTML。
谁能帮我弄清楚我错过了什么?
【问题讨论】:
这实际上是一个 MVC 视图,而不是 Razor 页面,这会有所不同,因为 ViewBag 在 Razor 页面中不可用。您的问题在这里得到解答:***.com/questions/34624034/… 【参考方案1】:该列表未呈现,因为未启用标签助手。检查您是否直接在 Views 文件夹下的 _ViewImports.cshtml
中添加以下行
@addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers
【讨论】:
我在我的项目中找不到 _ViewImports.cshtml 文件。 @HariKrishna , _ViewImports.cshtml 文件应该默认存在。如果没有,请按照以下步骤操作: 1. 在您的 Views 文件夹下直接创建一个名为“_ViewImports.cshtml”的文件; 2.添加以下内容:@using MyNameSpace @addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers
; 3.保存文件并刷新。
谢谢,@chan。这行得通。我的问题现在已经解决了。【参考方案2】:
控制器
var posts = new List<BlogDetails>();
posts.Add(
new BlogDetails
Id = 1,
Author = "Charles",
Title = "Finding Charles",
Body = "This is a great blog post",
PostedOn = DateTime.Now
);
ViewBag.listOfItems = new SelectList(posts, "Id", "Author");
return View();
剃须刀
@Html.DropDownListFor(model => model.post, (IEnumerable<SelectListItem>)ViewBag.listOfItems, "--Select Post--", new @class = "form-control" )
或者你可以试试这个
<select>
@foreach(var item in ViewBag.listOfItems)
<option value="@item.Id">@item.Author<option>
</select>
【讨论】:
谢谢@Kamran。它确实奏效了。我们可以在不使用标签助手的情况下这样做吗?类似于使用 HTML 选择标签。 @HariKrishna 我已经更新了答案,请检查 @Kamaran 我们可以使用 asp-items 和 asp-for 来代替编写 for 循环。就像我在问题中提到的那样。 这些方法有什么问题? 这些方法没有错。他们每个人都解决了我的问题。我只是想了解为什么 asp-items 不适合我。我发现在创建项目时_ViewImports.cshtml
文件丢失了。因此未启用标签助手。所以我用这一行 @addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers
添加了该文件。现在标签助手已启用,我的代码正在运行。谢谢你的努力。我开始了解使用下拉菜单的各种方法。以上是关于MVC 视图 - 无法在选择下拉列表中填充列表的主要内容,如果未能解决你的问题,请参考以下文章
如何在 ASP.NET MVC 3 中为填充的下拉列表创建视图模型
使用 JSON 结果填充下拉列表 - 使用 MVC3、JQuery、Ajax、JSON 的级联下拉
如何通过 ajax 使用数据库数据填充 ASP.NET MVC 4 下拉列表