循环遍历目录并使用剃刀获取每个图像文件路径

时间:2015-10-02 16:24:25

标签: asp.net asp.net-mvc razor web-applications asp.net-mvc-5

我正在寻找一种基于MVC5剃刀中的URL在我网站的文件夹中循环显示图像的好方法。

网址的结构如下:
/主页/媒体/照片/图片/ GALLERYNAME

我在RouteConfig中添加了以下内容:

    routes.MapRoute(
        name: "Gallery",
        url: "{controller}/Media/Photos/{action}/{galleryName}",
        defaults: new { controller = "Home", action = "Index", galleryName = UrlParameter.Optional }
    );

我的HomeController中有以下内容:

public ActionResult Gallery(string galleryName)
{
    ViewBag.Message = galleryName;
    return View();
}

现在根据发送到我的图库视图的ViewBag值'galleryName',我想循环浏览以下目录,这样我就可以获取每个图像并显示它以便查看灯箱:

“〜/内容/ IMG /媒体/图片/ GALLERYNAME”

我不确定是否应该直接在我的视图中或在我的控制器中的Gallery ActionResult中进行循环,然后通过包含图像所有路径的字符串列表。当我在控制器中尝试它时,我在使用Directory.EnumerateFiles时遇到问题。它正在我的C盘上搜索路径。我需要相对于我的网站的路径。有些东西告诉我,我可能需要创建一个虚拟目录来使用System.IO。

如果有人想看到或评论,

public ActionResult Gallery(string galleryName)
{
    string galleryPath = Path.Combine(this.Server.MapPath(@"~/Content/img/Media/Photos"), galleryName);
    var fullImagePaths = Directory.GetFiles(galleryPath);

    string sitePath = "~/Content/img/Media/Photos/";
    var imagePaths = fullImagePaths.Select(fp => sitePath + Path.GetFileName(fp));

    return View(imagePaths);
}

这会生成一个可以直接进入img src属性的字符串列表:ie "~/Content/img/Media/Photos/myimage.jpg"

1 个答案:

答案 0 :(得分:3)

使用Server.MapPath获取~/Content/img/Media/Photos的物理路径。然后将其与图库名称结合使用。

我个人会在您的控制器中执行此操作,为您的视图提供文件列表(可能转换为某些视图模型),但您也可以在视图中执行此操作:

public ActionResult Gallery(string galleryName)
{
    string galleryPath = Path.Combine(
             this.Server.MapPath(@"~/Content/img/Media/Photos"), 
             galleryName);

    //loop through images in the gallery folder and create list of images
    var images = ...

    return View(images);
}