2015-07-15 2 views
1

Я использую слайдер изображения с 7 изображениями. У меня есть папка в моем приложении ASP.NET Web Forms под названием Slider с 50 изображениями в ней. Каждый раз, когда я обновляю или посещаю страницу, я хочу, чтобы ползунок был заполнен 7 различными изображениями каждый раз из 50 изображений в папке.Случайные изображения, отображаемые в слайдере

ASPX

<div class="slider"> 
       <div id="slider1"> 
        <% Response.Write("<img src='" + chooseImage() + "' />");%> 
        <%-- <img border="0" src="Slider/B50.JPG" width="850" height="637" /> 
        <img border="0" src="Slider/B51.JPG" width="850" height="637" /> 
        <img border="0" src="Slider/C47.JPG" width="850" height="637" /> 
        <img border="0" src="Slider/C43.JPG" width="850" height="637" /> 
        <img border="0" src="Slider/E2.JPG" width="850" height="637" /> 
        <img border="0" src="Slider/W5.JPG" width="850" height="637" /> 
        <img border="0" src="Slider/M21.JPG" width="850" height="637" />--%> 
       </div> 
       <ul id="thumb"></ul> 
       <div id='next' class="slider_next"> 
        <img border="0" src="Images/next.png" width="57" height="57" alt="next image" /></div> 
       <div id='prev' class="slider_prev"> 
        <img border="0" src="Images/prev.png" width="57" height="57" alt="previous image" /></div> 
      </div> 
     </div> 

Прежде чем я только что был прямой путь к 7 изображений в папке, но я хочу, чтобы это было случайным образом.

<% Response.Write("<img src='" + chooseImage() + "' />");%> 

ASPX.CS

protected void Page_Load(object sender, EventArgs e) 
     { 
      chooseImage(); 
     } 
     public string chooseImage() 
     { 
      if (Session["img"] == null) 
      { 
       string imgPath; 
       int fileCount = Directory.GetFiles(Server.MapPath("Slider/"), "*.*", SearchOption.TopDirectoryOnly).Length; 
       fileCount = fileCount + 1; 
       imgPath = "Slider/" + RandomNumber(1, fileCount) + ".jpg"; 
       Session["img"] = imgPath; 
       return imgPath; 
      } 
      else 
       return Session["img"].ToString(); 
     } 
     private int RandomNumber(int min, int max) 
     { 
      Random random = new Random(); 
      return random.Next(min, max); 
     } 

При запуске приложения изображение не отображается в настоящее время слайдера.

Slider Папка

enter image description here

ответ

0

При получении imgPath, вам нужно разрешить URL, чтобы сделать его действительным для клиента. Это можно сделать с помощью метода Control.ResolveUrl:

imgPath = ResolveUrl("Slider/" + RandomNumber(1, fileCount) + ".jpg"); 

Если исходное изображение является недействительным, не будет отображаться без изображения.

Однако, как только вы разрешите URL-адрес, все изображения, вероятно, будут такими же, поскольку вы кешируете результаты до Session["img"]. Чтобы получать рандомизированные изображения каждый раз, просто удалите оператор if и тело else.

Вы должны также изменить

Random random = new Random(); 

локальной переменной к переменной экземпляра или статической переменной, как описано в этом stackoverflow question.

Редактировать: вы должны, вероятно, переписать свой метод chooseImage(), чтобы получить любой файл в каталоге «Ползунок». Как и в настоящее время, он будет возвращать только пути, такие как «Slider/1.jpg» и «Slider/2.jpg».

public string chooseImage() 
{ 
    string[] files = Directory.GetFiles(Server.MapPath("Slider/"), "*.*", SearchOption.TopDirectoryOnly); 
    int fileCount = files.Length; 
    string fileName = Path.GetFileName(files[RandomNumber(0, fileCount)]); 
    return "Slider/" + fileName; // or return ResolveUrl("Slider/" + fileName); 
} 
+0

моих изображений не отображается еще папка в проекте, и каждое изображение будет иметь пример пути «Slider/A2.jpg» поэтому мой путь должен быть «Slider /» вправо? –

+0

Является ли папка «Slider» в корневом каталоге? –

+0

Да, его в обозревателе решений со всеми остальными файлами у него не было проблем с отображением их, когда у меня был прямой путь к изображению. –

Смежные вопросы