2009-05-30 7 views
2

Je veux savoir quelle est la meilleure pratique pour les valeurs de passage (parfois plusieurs valeurs) entre deux pages asp.netQuelles sont les options pour je dois passer une valeur entre deux pages asp.net

Dans le passé, j'ai chaînes de requête utilisées pour passer une valeur dans asp comme ceci:

href='<%# Eval("TestID","../Net/TestPage.aspx?TestID={0}") %>'><%#Eval("Title")%> </a> 

Je suppose que vous pouvez le faire dans le code derrière, mais je ne sais pas la meilleure façon. Je suppose également qu'il est possible de passer plus d'une valeur.

Quelqu'un pourrait-il me fournir un extrait de VB qui me donnerait une idée de la façon de procéder?

Répondre

5

Vous disposez de nombreuses options pour transmettre des données et toutes peuvent transmettre plusieurs valeurs entre les pages.

Vous pouvez utiliser la collection Request.Form pour capturer les valeurs qui ont été soumises à partir d'un formulaire HTML avec le

verbe POST (ie "method =" POST ">) Le code ressemble à:.

Dim formvalue As String 
formValue = Request.Form("FormField1") 

vous pouvez également utiliser des paramètres dans une URL query string (un peu comme vous par exemple):

Dim queryStringValue As String 
queryStringValue = Request.QueryString("QueryStringValue1") 

vous pouvez définir un cookie (il La durée de vie dépend de la valeur de la propriété Expiry que vous avez définie):

Définition d'un cookie (remarque: vous utilisez ici l'objet HttpResponse. Le navigateur de l'utilisateur stocke le cookie quand il reçoit la valeur d'en-tête HTTP Set-Cookie de la réponse à une demande)

Response.Cookies("CookieValue") = "My Cookie Data" 
Response.Cookies("CookieValue").Expires = DateTime.Now.AddDays(1) ' optional, expires tomorrow 

Récupération d'une valeur de cookie (nous utilisons l'objet HttpRequest ici):

Dim cookieValue As String 
cookieValue = Request.Cookies("CookieValue") 

Vous pouvez utiliser l'objet HttpSessionState (accessible via la propriété Session d'une page). Pour définir une variable de session:

Session["SessionValue"] = "My Session Value" 

Pour récupérer une valeur de session:

Dim sessionValue As String 
sessionValue = Session["SessionValue"] 

Il y a une autre façon de passer l'état de la page entre les pages à l'aide Page.Transfer (voir How to: Pass Values Between ASP.NET Web Pages), mais je vais essayer et être à l'aise avec ce qui précède avant de regarder dans cela.


En ce qui concerne les bonnes pratiques, cela dépend vraiment des données que vous transmettez.

  • Ne pas envoyer des données sensibles via des URL (chaînes de requêtes), les formulaires ou les cookies. Celles-ci peuvent être interceptées de différentes manières
  • Transmettez des données sensibles à l'aide d'un magasin côté serveur (comme un état de session ou une base de données), mais envisagez la façon de conserver l'ID de session en toute sécurité.
  • jamais données de confiance de l'extérieur de votre application (données que les utilisateurs sont entrés via un formulaire, les informations lues à partir d'une base de données, etc.). Toujours encoder ces informations avant de les afficher à nouveau dans vos pages. Cela empêche contre Cross-Site Scripting (a.k.a XSS) attacks.
  • N'utilisez pas d'ID séquentiel dans les chaînes de requête dans lesquelles vous passez des identifiants spécifiques à l'utilisateur entre les pages. Supposons que vous créez une page Orders.aspx répertoriant toutes les commandes d'un client. Vous passez un paramètre CustID via une chaîne de requête: Orders.aspx? CustID = 123. Il est facile pour quelqu'un de changer l'URL en Orders.aspx? CustID = 124 et d'afficher les informations qu'ils ne devraient pas. Vous pouvez contourner ce problème en vérifiant que l'utilisateur actuel est autorisé à voir les informations, vous pouvez utiliser un identfier qui ne peut pas être facilement deviné (généralement un GUID) ou transmettre les informations du côté serveur.
1

Vous pouvez utiliser une session, des cookies, la chaîne de requête, des champs de formulaire masqués dans une demande de publication.

+0

Pouvez-vous utiliser des champs de formulaire cachés pour une requête croisée page asp.net? – Andomar

+0

@Andomar: Vous pouvez utiliser la méthode Page.PreviousPage.FindControl ("hiddenControl") pour accéder au champ masqué. Référence: http://www.codeproject.com/KB/aspnet/CrossPagePosting.aspx – Kirtan

Questions connexes