在c# ASP.NET中随机映射图像



看了不少。

我有一个aspx网页上的图像控制,我想加载图像从我的web目录随机显示在图像控制。下面是代码,以及我已经完成了多少。

似乎是一个简单的任务,随机请求一个图像文件,并显示在一个网页上,所有我收到然而是一个本地文件路径(这似乎是没有用的图像控制)和网页上没有图像。

AppSettings。imageUrl返回:"~/Images"

如有任何建议,不胜感激。

        protected void Page_Load(object sender, EventArgs e)
    {
        GetImage();
    }
    private void GetImage()
    {
        imgMain.ImageUrl = ResolveClientUrl(RandomImage());
    }
    private string RandomImage()
    {
        string mapPath = Request.MapPath(AppSettings.imageUrl);
        var rand = new Random();
        var files = Directory.GetFiles(mapPath);
        return files[rand.Next(files.Length)];

你的RandomImage()方法可能没有返回相对于当前页面的文件路径。要么返回

string fileName = Path.GetFileName(file[rand.Next(files.Length)]);
return AppSettings.imageUrl + fileName;

然后解析或者马上解析

string fileName = Path.GetFileName(file[rand.Next(files.Length)]);
return Request.MapPath(AppSettings.imageUrl + fileName);

在结果页面上查看源代码,看看<img src="...">是否被设置为一个合理的值。

进一步调查发现,ResolveClientUrl似乎接受一个相对 URL,而不是一个绝对的文件系统路径。因此,RandomImage应该返回如下内容:

return AppSettings.imageUrl + "/" + Path.GetFileName(files[rand.Next(files.Length)]);

您正在获取文件名。的目录。GetFiles也可以在非web应用程序中使用,因此将文件视为相对于您的网站根文件是没有意义的。

你能做的就是像这样得到你的站点的根目录的本地路径:

string root = Request.MapPath("~/");

,然后从您选择的文件中删除该子字符串:

files[rand.Next(files.Length)].Replace(root, string.Empty);

最新更新