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-itemsasp-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 下拉列表

MVC 5下拉列表用于编辑视图中的多选值绑定

ASP.NET MVC 视图需要将选定的下拉列表和日历日期传递给模型

根据另一个下拉列表中的选择填充一个下拉列表,然后重定向