Ho avuto qualche problema per visualizzare l’indirizzo e-mail e l’indirizzo Web all’interno di un repeater, i quali dovevano essere entrambi linkabili.
La prima soluzione a cui ho pensato è stata quella di utilizzare un asp:hyperlink dove la proprietà navigateUrl veniva impostata con l’indirizzo, questa soluzione può andare bene per l’indirizzo del Sito Web ma per l’e-mail non funziona.
Quindi ho pensato di scrivere un metodo che riceve in input due parametri l’indirizzo ed il protocollo e restituisce in output un tag a con la proprietà href impostata secondo i parametri di input.
Ecco il codice con il repeater che effettua la chiamata:
<asp:Repeater ID="repDealer" runat="server" DataSourceID="odsDealer">
<ItemTemplate>
<p>
<%# Eval("Nomer") %><br />
<%# Eval("Indirizzo") %><br />
<%# Eval("Citta") %><br />
<%# Eval("Provincia") %><br />
<%# Eval("Cap") %><br />
<%# Eval("Telefono") %><br />
<%# Eval("Fax") %><br />
<%# GetUrl(Eval("IndirizzoSitoWeb"), "http://", true)%><br />
<%# GetUrl(Eval("Email"), "mailto:", false) %>
</p>
</ItemTemplate>
</asp:Repeater>
Ecco il metodo GetUrl che costruisce il link:
protected String GetUrl(object indirizzo, object protocollo, object target)
{
StringBuilder sb = new StringBuilder(String.Empty);
sb.Append("<a href=\"");
sb.Append(protocollo.ToString());
sb.Append(indirizzo.ToString());
sb.Append("\" ");
if ((bool)target)
{ sb.Append(" target=\"_blank\" "); }
sb.Append(">");
sb.Append(indirizzo.ToString());
sb.Append("</a>");
return sb.ToString();
}