我正在寻找一种基于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"
答案 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);
}