Methode d’extension asp.net mvc pour ajouter un paramètre dans l’url

 

Voici une petite methode d’extension bien pratique pour pouvoir ajouter un parametre dans l’url courante

/// <summary>
/// Ajoute un parametre et sa valeur dans une URL en tenant compte de sa presence eventuelle
/// </summary>
/// <example>
/// Exemple d'utilisation
/// <code>
/// <![CDATA[
///
/// une url existante est de la forme
/// http://domain.com/test?param1=valeur1
///
/// <a href='<%=Url.AddParameter("param2", "valeur2")%>'>Mon lien</a>
///
/// Donnera le resultat suivant :
///
/// http://domain.com/test?param1=valeur1&param2=valeur2
///
/// <a href='<%=Url.AddParameter("param1", "valeur2")%>'>Mon lien</a>
///
/// Donnera le resultat suivant :
///
/// http://domain.com/test?param1=valeur2
///
/// ]]>
/// </code>
/// </example>
/// <remarks>
/// "value" est urlencodé par la methode, ne pas passer la valeur deja encodée
/// </remarks>
/// <param name="helper">The helper.</param>
/// <param name="key">The key.</param>
/// <param name="value">The value.</param>
/// <returns>Le lien avec le couple key=value</returns>
public static string AddParameter(this UrlHelper helper, string key, string value)
{
var link = helper.RequestContext.HttpContext.Request.Url.PathAndQuery;
var pattern = string.Format("&*{0}=[^&]*", key);
link = System.Text.RegularExpressions.Regex.Replace(link, pattern, "");
link = link.Trim('?').Trim('&');
var separator = (link.IndexOf("?") == -1) ? "?" : "&";
link += string.Format("{0}{1}={2}", separator, key, helper.Encode(value));
return link;
}

Aucun commentaire: