Une fonction permettant de rajouter des url à la page courante.
Il y a 3 signature différente ainsi on peut appeller la fonction en passant un dictionnaire, une keyvaluepair (un objet contenant une clé et une valeur) ou enfin 2 string contenant une valeur et une clé.
J'utilise .net 2 et les generics pour cette fonction car c'est beaucoup plus facile, mais il n'y a rien de compliqué à le rendre compatible avec .net 1.1
Je me sert enormement de cette classe pour mes customControls :)
Exemple d'utilisation :
Dans ma page j'ai ca :
Dim params As New Dictionary(Of String, Object)
params.Add("MyPostBack", Me.UniqueID)
params.Add("TabIndex", i)
lit1.text = "<a href=""" & Util.AddParameterToUrl(params) & """>Mon Texte</a>"
Dans la page si l'url est :
/Default6.aspx
la function retournera :
/Default6.aspx?MyPostBack=TabStrip1&TabIndex=1
Si de nouveau on clique sur un autre lien (vous avez remarquer que j'ai un paramètre i, donc un compteur ;))
/Default6.aspx?MyPostBack=TabStrip1&TabIndex=1
pourra me renvoyer vers
/Default6.aspx?MyPostBack=TabStrip1&TabIndex=4
et si l'on a d'autres paramètres à l'url par exemple l'url origine est
/Default6.aspx?titi=tata&toto=truc
la nouvelle adresse sera
http://localhost:1744/TestWebSite/Default6.aspx?MyPostBack=TabStrip1&TabIndex=3&titi=tata&toto=truc
Source / Exemple :
Imports System.Web
Imports System.Web.UI
Imports System.Text
Public Class Util
''' <summary>
''' Rajoute des paramètres à l'url en cour
''' </summary>
''' <param name="Dicos">Collection de paires de clés valeurs </param>
''' <returns>l'url avec les nouveaux paramètres</returns>
''' <remarks></remarks>
Shared Function AddParameterToUrl(ByVal Dicos As Dictionary(Of String, Object)) As String
Dim sb As New stringbuilder
'on verifie qu'il existe une requete
If Not System.Web.HttpContext.Current Is Nothing Then
Dim Request As HttpRequest = System.Web.HttpContext.Current.Request
'ajout de l'url sans les params
sb.Append(GetPathAndScriptOnly)
If Not IsNothing(Dicos) AndAlso Dicos.Count > 0 Then
sb.Append("?")
'on rajoute les params de notre dicos
For Each Def As KeyValuePair(Of String, Object) In Dicos
sb.AppendFormat("{0}={1}&", Def.Key, HttpUtility.UrlEncode(CStr(Def.Value)))
Next
'on rajoute les params qui etaient déjà dans l'url
For Each key As String In Request.QueryString.Keys
'Si dicos possede la valeur alors on l'a déjà ajouté
If Not Dicos.TryGetValue(key, Nothing) Then
sb.AppendFormat("{0}={1}&", key, Request.QueryString(key))
End If
Next
Else
'c'est pas parce que dico est vide qu'on doit pas mettre les anciens paramètres
For Each key As String In Request.QueryString.Keys
sb.AppendFormat("{0}={1}&", key, Request.QueryString(key))
Next
End If
Else
Throw New System.Web.HttpException("Request is nothing")
End If
' On enleve le & de fin si présent
If sb.ToString.EndsWith("&"c) Then
Return sb.ToString.Remove(sb.ToString.Length - 1)
Else
Return sb.ToString
End If
End Function
''' <summary>
''' Rajoute des paramètres à l'url en cours
''' </summary>
''' <param name="valuePair">Dictionnaire contenant la valeur a réjouté</param>
''' <returns>l'url avec les nouveaux paramètres</returns>
''' <remarks></remarks>
Shared Function AddParameterToUrl(ByVal valuePair As KeyValuePair(Of String, Object)) As String
Dim dicos As New Dictionary(Of String, Object)
dicos.Add(valuePair.Key, valuePair.Value)
Return AddParameterToUrl(dicos)
End Function
''' <summary>
''' Rajoute des paramètres à l'url en cours
''' </summary>
''' <param name="key">clé à rajouter</param>
''' <param name="value">valeur a rajouté</param>
''' <returns>l'url avec les nouveaux paramètres</returns>
''' <remarks></remarks>
Shared Function AddParameterToUrl(ByVal key As String, ByVal value As String) As String
Dim dicos As New Dictionary(Of String, Object)
dicos.Add(key, value)
Return AddParameterToUrl(dicos)
End Function
''' <summary>
''' Retourne l'url sans les paramètres querystring
''' </summary>
''' <returns></returns>
''' <remarks></remarks>
Shared Function GetPathAndScriptOnly() As String
If Not System.Web.HttpContext.Current Is Nothing Then
Dim TmpPathAndScript As String = System.Web.HttpContext.Current.Request.ServerVariables("script_name") & ""
If InStr(TmpPathAndScript, "//") > 0 Then
TmpPathAndScript = Replace(TmpPathAndScript, "//", "/")
End If
Return TmpPathAndScript
Else
Throw New System.Web.HttpException("Request is nothing")
End If
End Function
End Class
Conclusion :
Pour l'instant j'ai pas vu de bug mais je ne suis pas sur d'avoir géré tous les cas.
Si vous voyez des bugs etc... merci de me le dire. Tous commentaires sont la bienvenus ;)
Vous n'êtes pas encore membre ?
inscrivez-vous, c'est gratuit et ça prend moins d'une minute !
Les membres obtiennent plus de réponses que les utilisateurs anonymes.
Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.
Le fait d'être membre vous permet d'avoir des options supplémentaires.