web-dev-qa-db-fra.com

Comment passer des valeurs sur les pages en ASP.net sans utiliser Session

J'essaie d'améliorer les performances de mon portail Web. J'utilise Session pour stocker des informations d'état.

Mais j'ai entendu dire que l'utilisation de session diminuerait la vitesse de l'application. Existe-t-il un autre moyen de transmettre des valeurs sur la page dans asp.net?.

28
Optimus

Vous pouvez transmettre les valeurs d'une page à une autre en suivant les éléments suivants.

Response.Redirect
Cookies
Application Variables
HttpContext

Response.Redirect

ENSEMBLE :

Response.Redirect("Defaultaspx?Name=Pandian");

GET:

string Name = Request.QueryString["Name"];

Cookies

ENSEMBLE :

HttpCookie cookName = new HttpCookie("Name");
cookName.Value = "Pandian"; 

GET:

string name = Request.Cookies["Name"].Value;

Variables d'application

ENSEMBLE :

Application["Name"] = "pandian";

GET:

string Name = Application["Name"].ToString();

Reportez le contenu complet ici: Passez les valeurs de l'une à l'autre

51
Pandian

Il y a plusieurs façons d'y parvenir. Je peux vous expliquer brièvement les 4 types que nous utilisons dans notre cycle de vie de programmation quotidienne.

S'il vous plaît passer par les points ci-dessous.

1 chaîne de requête.

FirstForm.aspx.cs

Response.Redirect("SecondForm.aspx?Parameter=" + TextBox1.Text);

SecondForm.aspx.cs

TextBox1.Text = Request.QueryString["Parameter"].ToString();

C'est le moyen le plus fiable lorsque vous transmettez un type de valeur entier ou d'autres paramètres courts. Plus d'avancée dans cette méthode si vous utilisez des caractères spéciaux dans la valeur en passant à travers la chaîne de requête, vous devez encoder la valeur avant de la transmettre à la page suivante. Ainsi, notre extrait de code sera quelque chose comme ça:

FirstForm.aspx.cs

Response.Redirect("SecondForm.aspx?Parameter=" + Server.UrlEncode(TextBox1.Text));

SecondForm.aspx.cs

TextBox1.Text = Server.UrlDecode(Request.QueryString["Parameter"].ToString());

Encodage d'URL

  1. Server.URLEncode
  2. HttpServerUtility.UrlDecode

2. Passer une valeur à travers un objet contextuel

Passer une valeur à travers un objet contextuel est une autre méthode largement utilisée.

FirstForm.aspx.cs

TextBox1.Text = this.Context.Items["Parameter"].ToString();

SecondForm.aspx.cs

this.Context.Items["Parameter"] = TextBox1.Text;
Server.Transfer("SecondForm.aspx", true);

Notez que nous naviguons vers une autre page en utilisant Server.Transfer au lieu de Response.Redirect.Certains d'entre nous utilisons également un objet Session pour transmettre des valeurs. Dans cette méthode, la valeur est enregistrée dans l'objet Session, puis extraite ultérieurement de l'objet Session dans la deuxième page.

3. Publier le formulaire sur une autre page au lieu de PostBack

Troisième méthode de transmission de valeur en publiant la page sur un autre formulaire. Voici l'exemple de cela:

FirstForm.aspx.cs

private void Page_Load(object sender, System.EventArgs e)
{
   buttonSubmit.Attributes.Add("onclick", "return PostPage();");
}

Et nous créons une fonction javascript pour poster le formulaire.

SecondForm.aspx.cs

function PostPage()
{
   document.Form1.action = "SecondForm.aspx";
   document.Form1.method = "POST";
   document.Form1.submit();
}
TextBox1.Text = Request.Form["TextBox1"].ToString();

Ici, nous publions le formulaire sur une autre page plutôt que sur lui-même. Vous pouvez obtenir l'état d'affichage non valide ou une erreur dans la deuxième page en utilisant cette méthode. Traiter cette erreur, c'est mettre EnableViewStateMac=false

4. Une autre méthode consiste à ajouter la propriété PostBackURL du contrôle pour les postages croisés

Dans ASP.NET 2.0, Microsoft a résolu ce problème en ajoutant la propriété PostBackURL du contrôle pour la publication croisée de pages. La mise en œuvre consiste à définir une propriété de contrôle et vous avez terminé.

FirstForm.aspx.cs

<asp:Button id=buttonPassValue style=”Z-INDEX: 102″ runat=”server” Text=”Button”         PostBackUrl=”~/SecondForm.aspx”></asp:Button>

SecondForm.aspx.cs

TextBox1.Text = Request.Form["TextBox1"].ToString();

Dans l'exemple ci-dessus, nous affectons la propriété PostBackUrl du bouton, nous pouvons déterminer la page sur laquelle il publiera au lieu de lui-même. Dans la page suivante, nous pouvons accéder à tous les contrôles de la page précédente en utilisant un objet Request.

Vous pouvez également utiliser la classe PreviousPage pour accéder aux contrôles de la page précédente au lieu d'utiliser un objet Request classique.

SecondForm.aspx

TextBox textBoxTemp = (TextBox) PreviousPage.FindControl(“TextBox1″);
TextBox1.Text = textBoxTemp.Text;

Comme vous l'avez remarqué, il s'agit également d'une implémentation simple et propre permettant de transmettre des valeurs entre les pages.

Référence: Microsoft MSDN WEBSITE

CODAGE HEUREUX!

27
शेखर

S'il ne s'agit que de transmettre des valeurs entre les pages et que vous n'en avez besoin que pour une requête. Utilisation Context.

Contexte

L'objet Contexte contient des données pour un seul utilisateur, pour une seule requête et il n'est conservé que pour la durée de la requête. Le conteneur Context peut contenir de grandes quantités de données, mais il est généralement utilisé pour stocker de petites parties de données car il est souvent implémenté pour chaque demande via un gestionnaire dans le fichier global.asax. Le conteneur Context (accessible à partir de l'objet Page ou à l'aide de System.Web.HttpContext.Current) est fourni pour contenir les valeurs devant être transmises entre différents HttpModules et HttpHandlers. Il peut également être utilisé pour stocker des informations pertinentes pour une requête complète. Par exemple, le portail IBuySpy introduit des informations de configuration dans ce conteneur lors du gestionnaire d'événements Application_BeginRequest dans le fichier global.asax. Notez que cela ne s'applique que pendant la demande en cours; Si vous avez besoin de quelque chose qui sera toujours disponible pour la prochaine demande, envisagez d’utiliser ViewState. La définition et l'obtention des données de la collection Context utilisent une syntaxe identique à celle que vous avez déjà vue avec d'autres objets de la collection, tels que Application, Session et Cache. Deux exemples simples sont présentés ici:

// Add item to
Context Context.Items["myKey"] = myValue;

// Read an item from the
 Context Response.Write(Context["myKey"]);

http://msdn.Microsoft.com/en-us/magazine/cc300437.aspx#S6

En utilisant ce qui précède. Si vous faites alors un Server.Transfer les données que vous avez sauvegardées dans le contexte seront maintenant disponibles sur la page suivante. Vous n'avez pas à vous préoccuper de supprimer/ranger ces données car elles ne concernent que la demande en cours.

3
Sam Shiles

Vous pouvez l'affecter à un champ caché et le récupérer à l'aide de

var value= Request.Form["value"]
1
Matthew Evans

Vous pouvez utiliser chaîne de requête pour transmettre la valeur d'une page à une autre.

1. passer la valeur en utilisant chaîne de requête

 Response.Redirect("Default3.aspx?value=" + txt.Text + "& number="+n);

2.Retrivez la valeur dans la page que vous voulez en utilisant l’une de ces méthodes.

Méthode1:

    string v = Request.QueryString["value"];
    string n=Request.QueryString["number"];

Méthode2:

      NameValueCollection v = Request.QueryString;
    if (v.HasKeys())
    {
        string k = v.GetKey(0);
        string n = v.Get(0);
        if (k == "value")
        {
            lbltext.Text = n.ToString();
        }
        if (k == "value1")
        {
            lbltext.Text = "error occured";
        }
    }

NOTE : La méthode 2 est la méthode la plus rapide.

1
coder