【问题标题】:How send 2 List from C# controller to view with ViewBag如何从 C# 控制器发送 2 个列表以使用 ViewBag 查看
【发布时间】:2024-04-22 09:10:01
【问题描述】:

我将月份(从文件路径中获取值)和文件路径发送到 MVC 视图,以便我可以显示链接到文件的月份列表以像这样下载它:

 OCT(that is linked to file path)
 Nov (that is linked to file path)
 December (that is linked to file path)

这是我的控制器 C# 代码:

     public ActionResult Help()
    {

        var releaseNoteFiles = Directory.GetFiles(Server.MapPath("~/Content/ReleaseNotes"));

        List<string> month = new List<string>();
        foreach (var releaseNoteFile in releaseNoteFiles)
        {
            month.Add(new Regex("([^A-Z]*)([a-zA-Z]*)").Match(Path.GetFileNameWithoutExtension(releaseNoteFile).Split('.').Last()).Groups[2].Value);
        }
        ViewBag.releaseNoteFilesmonth = month;   /Has October,Nov,...
        ViewBag.releaseNoteFiles = releaseNoteFiles; /Has Path to the File

        return View();
    }
    

这是我的观点,我对如何发送 2 个列表(文件名和路径)有疑问 此代码显示列表 2 次。

          @foreach (var item in ViewBag.releaseNoteFilesmonth)
                    {foreach (var item2 in ViewBag.releaseNoteFiles)
                        {
                            @item <a href="@item2">@item</a>
                            <br />
                        }
                      }

【问题讨论】:

  • 您每个月都在迭代您的所有releaseNoteFiles(通过@foreach (var item in ViewBag.releaseNoteFilesmonth),所以如果您有12个月的时间,您将在页面上看到您所有的releaseNoteFiles 12次。

标签: c# model-view-controller


【解决方案1】:

您似乎想在视图上打印带有超链接的月份和月份文件,如果可以解决问题,请参阅下面的代码。

@foreach (var item in ViewBag.releaseNoteFilesmonth)
{
    var matchedmonthfile = (ViewBag.releaseNoteFiles as string[]).Where(x => x.Contains(item)).FirstOrDefault();
    @item <a href="@matchedmonthfile">@matchedmonthfile</a>
    <br />
}

【讨论】:

  • 出现此错误:无法使用 lambda 表达式作为动态分派操作的参数,除非先将其转换为委托或表达式树类型
  • 我已更新代码并将 lambda 表达式作为参数错误删除,pl。现在检查。
  • 错误如下:'值不能为空。参数名称:第 2 行中的 source' - var mappedmonthfile - @Vaibhav J
  • 我已经检查了它工作正常的代码,请确保您将 releaseNoteFiles 转换为 string[],正如我在代码中提到的那样