在视图中迭代IEnumerable不会打印任何内容

时间:2015-05-04 18:50:03

标签: c# asp.net asp.net-mvc

我正在尝试使用foreach中的view循环打印多个图像,并通过模型传入IEnumerable<Image>

我的问题是foreach循环根本不显示图像,我不知道我做错了什么。我已经尝试了16种不同的方式,除了图像链接断开或者根本没有任何东西,我仍然没有得到任何东西。

有人请看一看,看看他们是否能弄明白我做错了什么?这可能是非常简单的事情,我只是错过了它。

这是我的控制器:

public ActionResult UploadCommission(CommissionViewModel model)
{
    List<Image> fileNames = new List<Image>();

    //loop through multiple files
    foreach (HttpPostedFileBase file in model.Files)
    {
        //get file names
        string filename = System.IO.Path.GetFileName(file.FileName);

        //save files
        file.SaveAs(Server.MapPath("~/Content/" + filename));
        string filepathtosave = "~/Content/" + filename;

        fileNames.Add(new Image()
        {
            FilePath = filepathtosave
        });
    }

    model.ImageFilePaths = fileNames;

    return RedirectToAction("ViewComm", model);
}

这是显示信息的View

@foreach (CapstoneProject.Models.Image i in Model.ImageFilePaths)
{
    <img src="@Url.Content(i.FilePath)" />
}

@Model.Title

@Model.Price

@Model.Limit

@foreach (string tag in Model.Tags)
{
    <p>@tag</p>
}

@Model.Description

如果您需要更多信息,请告诉我们。

2 个答案:

答案 0 :(得分:1)

您正在使用RedirectToAction;根据{{​​3}}:

  

返回对浏览器的HTTP 302响应,这会导致浏览器向指定的操作发出GET请求。

当您在重定向到某个操作时传递该模型时,该数据将通过重定向操作丢失。您可能想要做的是确保您在重定向网址中传递图片网址或根本不使用重定向(只是渲染视图)

答案 1 :(得分:0)

这里真的不足以有效地回答你的问题,但是你提供的代码没有明显的错误。但是,为了将任何Image个实例添加到列表中,它们必须首先发布(即,如果model.Files本身为空,那么您的IEnumerable<Image>也是如此

为此,您应该检查两件事:

  1. 确保您的表单上有accept="multipart/form-data"。否则,上传将不会发布。

  2. 确保您的文件上传字段名称是这样的,它们将绑定到post上的model属性。在您的方案中,他们需要Files[N]等名称,其中N是索引。