2010-01-28 10 views
1

Mon client souhaite transmettre des valeurs via la chaîne de requête, mais ne souhaite pas que la chaîne de requête soit affichée dans la barre d'adresse du navigateur. Les valeurs transmises sont à des fins de suivi. Je sais que la publication ne se fait pas après avoir cliqué sur le lien href.Quels sont les événements déclenchés après avoir cliqué sur un lien href dans une application .Net?

Est-il possible de récupérer la valeur de la chaîne de requête sans l'afficher dans la barre d'adresse du navigateur? Je pense que cela peut être impossible, mais je peux me tromper; J'espère voir si quelqu'un a des réponses.

Répondre

0

Non, s'il se trouve dans la chaîne de requête, il sera visible par l'utilisateur final via la barre d'adresse. C'est le comportement standard pour les requêtes HTTP GET. Si vous utilisez WebForms, regardez dans le champ LinkButton. Cela va effectuer une publication réelle, qui est une opération POST. Vous allez répondre à l'événement OnClick de LinkButton dans votre code .NET, et vous êtes prêt à partir.

0

Il semble que vous ayez besoin de stocker une chaîne dans un endroit autre que la chaîne de requête. Que diriez-vous d'utiliser la gestion d'état pour ceci, par exemple, en stockant cette valeur dans la session, de cette façon elle sera disponible dans la nouvelle page qui s'ouvre après que la personne clique sur un lien.

Ajouter au Querystring:

"http://yoursite.com/yourpage?id=123"

magasin en session au lieu:

Utilisez un contrôle du serveur, comme un LinkButton ou un bouton pour rediriger la utilisateur à la nouvelle page, puis enregistrez la valeur de la chaîne à la session.

protected void LinkButton_Click(object sender, EventArgs e) 
    { 
     Session["Id"] = 123; 
     Response.Redirect("yourpage.aspx", false); 
    } 

Pour obtenir la valeur de chaîne de votre utilisation de session:

Session["id"].ToString(); 

Pour en savoir plus sur sur la gestion de l'Etat et voir d'autres options, allez here

solution différente

Chiffrez la valeur de la chaîne de requête avant de l'ajouter à l'URL, puis décryptez-la. Si vous suivez cette route, consultez cet article pour plus de détails sur le cryptage/décryptage des valeurs.

http://www.codeproject.com/KB/security/DotNetCrypto.aspx

+0

Je ne peux pas utiliser session.Nous utilisons un serveur de gestion de contenu n'importe qui peut ajouter la chaîne de requête et je ne pense pas que je serais en mesure de suivre tous en utilisant la session. –

+0

Mise à jour de ma réponse pour inclure une nouvelle solution –

0

Cela dépend de ce que vous essayez de suivre. Si vous essayez de suivre l'utilisateur à la volée pendant qu'il se déplace sur votre site, vous feriez mieux de mettre un petit jeton dans la session - comme Ricardo states in his answer.

Si vous voulez suivre la façon dont des liens particuliers exécutent sur votre site, ou qui relie un utilisateur est suit, alors vous aurez besoin d'utiliser un peu de JavaScript:

Fondamentalement, vous devrez créer un onclick événement sur les balises <a> qui appelle un service (ou similaire) sur votre serveur pour suivre/enregistrer le fait que ce clic est arrivé.

Si cette méthode renvoie true, le contrôle retournera au navigateur et le fichier href d'origine sera demandé.

Cet exemple suppose l'utilisation de jQuery, mais d'autres bibliothèques vous permettra de réaliser des choses semblables - vous pouvez utiliser tous les outils ASP.NET natifs, je viens d'avoir ce code à la main:

<a href="/someUrl.aspx" onClick="javascript:TrackThis(this);return true;">text</a> 

<script type="text/javascript"> 
    function TrackThis(link){ 
    $.ajax({ 
     url: "/WebServices/ClickTracker.asmx/Track", 
     type: "POST", 
     dataType: "json", 
     data: "{\"url\":\"" + link + "\", \"page\":\"" + window.location + "\"}" 
     contentType: "application/json; charset=utf-8" 
    }); 
    } 

Ensuite, vous pouvez créer un service Web simple qui prend les valeurs que vous transmettez (dans ce cas la valeur du lien sur lequel l'utilisateur a cliqué, et l'URL de la page où il était à ce moment), effectue son traitement, et reste à l'écart. Google fait quelque chose de très similaire à cela avec leurs résultats de recherche - l'URL dans la barre d'état des navigateurs et que vous arrivez à est celui du site indexé, mais au milieu, vous visitez une page de suivi sur les serveurs de Google pour dire que vous avez cliqué dessus, qui utilise l'événement onclick.