2009-04-08 2 views
0

Anstatt meinen Repeater mit Bildern aus einem Ordner in meinem Projekt zu bevölkern, möchte ich ihn mit einem Link dorthin polulieren, wo das Bild so ist ...... ........Bild von Hyperlink holen und nicht von Ordner, um mein Repeater Control zu bestücken

http://www.erate.co.za/imgGrab.aspx?Id=99

Welche Code-Änderungen muss ich meinen Code Blick auf meine Hyperlink für das Bild, und nicht die „Bilder“ -Ordner machen zu lassen?

Meine Seite laden

protected void Page_Load(object sender, EventArgs e) 
    { 
     if (!IsPostBack) 
     { 
      string sBasePath = System.Web.HttpContext.Current.Request.ServerVariables["APPL_PHYSICAL_PATH"]; 
      if (sBasePath.EndsWith("\\")) 
       sBasePath = sBasePath.Substring(0,sBasePath.Length-1); 

      sBasePath = sBasePath + "\\" + "pics"; 

      System.Collections.Generic.List<string> oList = new System.Collections.Generic.List<string>(); 
      foreach (string s in System.IO.Directory.GetFiles(sBasePath, "MyPicture.jpg")) 
      { 
       //We could do some filtering for example only adding .jpg or something 
       oList.Add(System.IO.Path.GetFileName(s)); 

      } 
      repImages.DataSource = oList; 
      repImages.DataBind(); 
     } 

    } 

Mein ItemDataBound Ereignis für meine Repeater (genannt repImages)

protected void repImages_ItemDataBound(object sender, RepeaterItemEventArgs e) 
    { 
     if (e.Item.ItemType == ListItemType.AlternatingItem || 
      e.Item.ItemType == ListItemType.Item) 
     { 
      string sFile = e.Item.DataItem as string; 

      //Create the thumblink 
      HyperLink hlWhat = e.Item.FindControl("hlWhat") as HyperLink; 
      hlWhat.NavigateUrl = ResolveUrl("~/pics/" + sFile ); 
      hlWhat.ToolTip = System.IO.Path.GetFileNameWithoutExtension(sFile); 
      hlWhat.Attributes["rel"] = "imagebox-bw"; 

      Image oImg = e.Item.FindControl("imgTheImage") as Image; 
      oImg.ImageUrl = ResolveUrl("~/createthumb.ashx?gu=/pics/" + sFile + "&xmax=100&ymax=100"); 


     } 

    } 

Etienne

+0

Bitte geben Sie Ihre ASPX-Quelle (der Teil, der den Repeater enthält) an, damit ich versuchen kann, dieses Beispiel auszuführen. – Cerebrus

+0

Danke! Sie können das ganze Projekt hier herunterladen ---- http://www.aspcode.net/A-simple-image-gallery.aspx ----- .ZIP-Datei befindet sich ganz unten ---- a wirklich cooles Projekt. – Etienne

Antwort

0

in der Vorlage des Repeaters gehören <img>-Tag. Wenn Sie die Quelle programmgesteuert festlegen müssen, geben Sie runat="server" ein.

+0

Danke, aber wie würde ich es mit meinem aktuellen Code integrieren? – Etienne

+0

@Richard, der Repeater enthält bereits ein asp: Image Control. – Cerebrus

+0

@Etienne: Weiß nicht, ohne das Markup zu sehen (wahrscheinlich ist die Antwort, Datenbindung zu verwenden). – Richard

1

Wenn ich es richtig verstehe, ist dies ein vielschichtiges Problem:

a. Sie möchten Bilder von einer Internet-URL anstelle eines lokalen Ordners laden. Dies bedeutet, dass Sie eine Möglichkeit haben müssen, die verfügbaren Dateien auf der Remote-URL aufzulisten. Wenn Sie das Problem objektiv betrachten, werden Sie feststellen, dass der einzige Unterschied zwischen dem Abrufen von Bildern von einem Remotestandort und von Ihrem lokalen System darin besteht, dass die Dateien mithilfe der DirectoryInfo-Klasse leicht aufzählbar sind. Die Methode GetFiles gibt hier ein Array von FileInfo zurück, und Sie können den tatsächlichen Dateinamen für jede Dateieigenschaft abrufen. Sie benötigen also eine Liste von Zeichenfolgen, die dem Speicherort der Datei zugeordnet sind.

b. Das Aufzählen der Dateien von einem Remote-Standort hängt von vielen Faktoren ab, z. B. dem Protokoll, das Sie zum Abrufen dieser Liste verwenden. Wenn Sie HTTP verwenden und davon ausgehen können, dass Sie die Kontrolle über den Server an diesem Speicherort haben, muss die URL in erster Linie das Durchsuchen von Verzeichnissen unterstützen. Sie müssen dann die Liste der bereitgestellten Verzeichnisse analysieren (die nicht standard- und serverspezifisch ist) und alle verfügbaren Bild-URLs als Zeichenfolgen laden. Sie können dann Ihren Repeater mit dieser Liste füllen. Eine mögliche Lösung finden Sie unter this discussion.

Wenn der Server FTP unterstützt, wird die Arbeit einfacher, da Sie die Bilder mithilfe der Methoden WebRequestMethods.Ftp.ListDirectory oder WebRequestMethods.Ftp.ListDirectory aufzählen können.

c. Wenn Sie Thumbnails für die Bilder erstellen möchten, müssen Sie Code schreiben, um jedes Bild herunterzuladen, es an einem temporären Speicherort zu speichern und dann dimensionale Manipulationen daran vorzunehmen.

d. Wenn jedoch die Liste der am Internetspeicherort verfügbaren Bilder statisch ist und Sie diese Informationen bereits haben, können Sie diese Liste einfach als Liste von Zeichenfolgen laden und die src-Eigenschaft jedes Image-Steuerelements auf diese Liste setzen. Die Thumbnails bleiben jedoch ein Problem, es sei denn, Sie können Ihren Thumbnail-Ersteller (den HTTP-Handler) auch unter dieser URL hochladen, so dass Dateien lokal zur Bearbeitung abgerufen werden und Thumbnails automatisch an Sie gesendet werden.

+0

Danke dafür - irgendwelche Codebeispiele, bitte, um mit Ihrer Erklärung zu gehen? – Etienne

+0

Nun, das ist schwierig zu tun, bis Sie einige der Fragen/Möglichkeiten, die ich erwähnt habe, beantworten. Ich denke, diese Frage ist eher "Soll ich ..." als "Wie ...?" – Cerebrus

+0

MMM, vielleicht muss ich sagen alle meine Bilder in einem Ordner speichern. Momentan sind sie in meiner DB gespeichert und ich wollte meinen Code nicht ändern. – Etienne

Verwandte Themen