如何在 ASP.NET MVC 视图中显示 2 个列表

Posted

技术标签:

【中文标题】如何在 ASP.NET MVC 视图中显示 2 个列表【英文标题】:How to show 2 lists in ASP.NET MVC view 【发布时间】:2022-01-16 15:47:30 【问题描述】:

我正在将文件和文件路径从控制器发送到 ASP.NET MVC 视图:

.....
ViewBag.releaseNoteFilesmonth = month; // this has list of months
ViewBag.releaseNoteFiles = releaseNoteFiles; //this has list of the path to the files

return View();

这是在视图中显示的方式:

@foreach (var item in ViewBag.releaseNoteFilesmonth)

    string url = (ViewBag.releaseNoteFiles as string[]).Where(x => x.Contains(item)).FirstOrDefault();
    <a href="@url"> @item</a>
    <br />

这是我期待的输出:

OCT - (Link to the file)
NOV - (Link to the file)
Dec - (Link to the file)

收到此错误:

值不能为空。参数名称:来源

在这一行:

string url = (ViewBag.releaseNoteFiles as string[]).Where(x => x.Contains(item)).FirstOrDefault();

【问题讨论】:

【参考方案1】:

在您使用x.Contains(item) 时可能存在过滤问题,这对于具有不同大小写(大写/小写)的字符串将失败。 试试下面的代码:

x.ToLower().Contains(item.ToLower())

如果上述解决方案不起作用,则声明 ViewBag.releaseNoteFiles as string[] 存在问题。确认ViewBag.releaseNoteFiles中的值,是否可以转换成string[]

【讨论】:

【参考方案2】:

恕我直言,您的 releaseNoteFiles 不是数组,它给出了一个空异常。 ViewData 需要对复杂数据类型进行类型转换,但 ViewBag 不需要。为了安全起见,使用 ToLower 进行不区分大小写的比较。所以试试这个

 string url = ViewBag.releaseNoteFiles.Where(x=x.ToLower().Contains(item.ToLower()))
.FirstOrDefault();

【讨论】:

以上是关于如何在 ASP.NET MVC 视图中显示 2 个列表的主要内容,如果未能解决你的问题,请参考以下文章

如何显示在 Asp.net MVC 中找不到的图像

如何只显示数据库中最近的 5 条记录 - ASP.NET MVC

如何在 ASP.Net MVC 中将列表对象显示到视图中?

如何在asp.net mvc视图中显示数据库记录

如何在 ASP.NET MVC 中控制局部视图的条件显示

ASP.NET Core 2.0 MVC 6. 如何管理每个视图的javascript文件?