2009-09-30 3 views
0

Si j'ai http://mysite.com?abc=123&def=345, puis-je faire une boucle sur le chargement de la page et supprimer ces éléments? Il semble que Querystring soit une collection en lecture seule. Si la page est une publication, les données de la chaîne de requête sont périmées. Je voudrais nettoyer l'URL quand cela arrive? auriez vous des idées pour faire ça?Est-il possible de supprimer des éléments de la chaîne Querystring dans asp.net?

+1

Pourquoi voulez-vous le nettoyer? Pour l'amour de l'apparence? S'il y a une raison programmatique, pensez à utiliser if (! IsPostback) dans vos gestionnaires d'événements pour faire la distinction entre l'original et la publication Page_Load(). –

+0

Sérieusement, réfléchissez-y avant de passer à l'action. Bien que, comme les autres répondants l'ont souligné à juste titre, il existe des moyens d'y parvenir, vous subvertissez un mécanisme que Microsoft a délibérément mis en place et qui fait partie intégrante d'ASP.NET. Si c'est une question d'apparence, suivez la suggestion de @ womp d'utiliser POST vs GET. –

Répondre

2

Malheureusement, même si vous avez supprimé des éléments de la chaîne côté serveur, lorsque vous avez renvoyé la réponse, le navigateur ne s'en soucierait pas - il afficherait toujours l'URL d'origine. Le mieux que vous puissiez faire est de rediriger le navigateur vers une nouvelle URL avec les paramètres supprimés en émettant un Response.Redirect(). Dans le cas contraire, pensez à modifier la requête pour utiliser POST au lieu de GET. Les paramètres n'apparaissent donc pas dans l'URL.

0

Il peut être plus judicieux d'affecter une copie de queryString à un paramètre de page dans page_load si la requête n'est pas une publication. Apportez vos modifications à la copie et utilisez-la pour toute autre opération. Si vous devez conserver les modifications entre les charges, affectez la valeur modifiée à un champ de formulaire masqué.

protected void Page_Load(object sender, EventArgs e) 
{ 
    sring saveQueryString; 

    if (!IsPostBack) 
    { 
     saveQueryString = Request.QueryString.ToString(); // join here - I doubt .ToString() will return the expected a=1?b=2?c=3 string 

     // modify to your hearts content here... 

     hiddenFormField.Text = saveQueryString; 
    } 
    else 
     saveQueryString = Request.Form[hiddenFormField.Id]; 

} 

qui est plus sur la fin de pseudo-code exécutable que, mais j'espère que ce sera assez bon pour des fins d'illustration.

Questions connexes