Le passage de la valeur de la page est un problème rencontré dès les premiers stades de l'apprentissage d'asp.net. De manière générale, il existe le passage de la valeur de la page, le passage de la valeur de l'objet de stockage, l'ajax, la classe, le modèle, le formulaire, etc. Mais de manière générale, les plus simples couramment utilisés sont QueryString, Session, Cookies, Application et Server.Transfer. Lors des entretiens, nous sommes souvent confrontés à de telles questions. En fait, nous connaissons plusieurs de ces méthodes car elles sont souvent utilisées dans les projets. Cependant, on estime qu'il est souvent difficile de répondre de manière exhaustive à la méthode de transfert de valeur de page dans ASP.NET.
1. QueryString
QueryString est un moyen très simple de transmettre des valeurs. Il peut afficher la valeur transmise dans la barre d'adresse du navigateur. Cette méthode peut être utilisée lors de la transmission d'une ou plusieurs valeurs avec de faibles exigences de sécurité ou une structure simple. Mais pour passer des tableaux ou des objets, cette méthode ne peut pas être utilisée.
Avantages de cette méthode : 1. Elle est simple à utiliser et est très efficace pour transférer des chiffres ou des valeurs de texte lorsque les exigences de sécurité ne sont pas élevées.
Inconvénients de cette méthode : 1. Manque de sécurité car sa valeur est exposée dans l'adresse URL du navigateur.
2. Les objets ne peuvent pas être transmis.
Utilisation : 1. Construisez l'adresse URL avec le nom et la valeur qui doivent être transmises dans le code de la page source.
2. Utilisez Response.Redirect(URL); dans le code de la page source pour rediriger vers l'adresse URL ci-dessus.
3. Utilisez Request.QueryString["name"]; dans le code de la page de destination pour récupérer la valeur passée dans l'adresse URL.
Exemple :(1)a.aspx
private void Button1_Click(object sender, System.EventArgs e) { string s_url; s_url = "b.aspx?name=" + Label1.Text; Response.Redirect(s_url); }
(2) b.aspx
private void Page_Load(object sender, EventArgs e) { Label2.Text = Request.QueryString["name"]; }
2. Séance
Cela doit être l'utilisation la plus courante parmi tout le monde. Son fonctionnement est similaire à celui de l'application, et il fonctionne sur des utilisateurs individuels, par conséquent, un stockage excessif entraînera l'épuisement des ressources mémoire du serveur.
Avantages : 1. Facile à utiliser, peut non seulement transmettre des types de données simples, mais également des objets.
2. La quantité de données n'est pas limitée.
Inconvénients : 1. Stocker une grande quantité de données dans des variables de session consommera plus de ressources du serveur.
2. Facile à perdre.
Utilisation : 1. Créez le nom et la valeur que vous devez transmettre dans le code de la page source pour construire la variable Session : Session["Name"]="Value(Or Object) )";
2. Utilisez la variable Session dans le code de la page de destination pour récupérer la valeur transmise. Résultat = Session["Nmae"]
Remarque : Vous pouvez détruire la session lorsqu'elle n'est pas utilisée. La méthode de destruction est la suivante : clear one : Session.Remove("session name. ");
Tout effacer : Session.Clear();
(2)b.aspx
private void Button1_Click(object sender, System.EventArgs e) { Session["name"] = Label.Text; }
3. Cookie
private void Page_Load(object sender, EventArgs e) { string name; name = Session["name"].ToString(); }
C'est également une méthode couramment utilisée pour stocker. de petits éléments d'information sur le navigateur de l'utilisateur et enregistrer des informations relatives à l'utilisateur, telles que les visites de l'utilisateur. Lorsqu'un site Web contient l'identifiant de l'utilisateur, ses préférences, etc., l'utilisateur peut obtenir des informations antérieures en les récupérant lors de sa prochaine visite. Les cookies peuvent donc également transmettre des valeurs entre les pages. Les cookies sont échangés entre le navigateur et le serveur via des en-têtes HTTP. Les cookies ne peuvent contenir que des valeurs de chaîne. Si vous souhaitez stocker des valeurs entières dans Cookie, vous devez d'abord les convertir sous forme de chaîne.
Comme Session, c'est pour chaque utilisateur, mais il y a une différence essentielle, c'est-à-dire que le Cookie est stocké côté client, tandis que la session est stockée côté serveur. Et l'utilisation de cookies doit être utilisée en conjonction avec l'objet intégré Request d'ASP.NET.
Avantages : 1. Simple à utiliser, c'est une méthode très courante pour conserver le statut d'utilisateur. Par exemple, dans un site Web commercial, il peut être utilisé pour conserver le statut d'utilisateur lorsque les utilisateurs couvrent plusieurs formulaires de pages.
Inconvénients : 1. Il est souvent critiqué pour être utilisé pour collecter la confidentialité des utilisateurs.
2. La sécurité n'est pas élevée et elle est facile à falsifier.
Utilisation :
1. Créez le nom et la valeur que vous devez transmettre dans le code de la page source pour construire l'objet Cookie :
2. Utilisez l'objet Cookie dans le code de la page de destination pour récupérer la valeur passée : Résultat = Request.Cookies[ "myCookie" ] .Value;
Exemple :
(1)a.aspx
HttpCookie objCookie = new HttpCookie("myCookie","Hello,Cookie!"); Response.Cookies.Add(cookie);
(2)b.aspx
private void Button1_Click(object sender, System.EventArgs e) { HttpCookie objCookie = new HttpCookie("myCookie","Hello,Cookie!"); Response.Cookies.Add(objCookie); }
四、Application
Application对象的作用范围是整个全局,也就是说对所有用户都有效。它在整个应用程序生命周期中都是有效的,类似于使用全局变量一样,所以可以在不同页面中对它进行存取。它和Session变量的区别在于,前者是所有的用户共用的全局变量,后者是各个用户独有的全局变量。
可能有人会问,既然所有用户都可以使用application变量,那他可以用在什么场合呢?这里举个例子:网站访问数。多个请求访问时都可以对它进行操作。
优点:1.使用简单,消耗较少的服务器资源。
2.不仅能传递简单数据,还能传递对象。
3.数据量大小是不限制的。
缺点:1.作为全局变量容易被误操作。所以单个用户使用的变量一般不能用application。
使用方法:1.在源页面的代码中创建你需要传递的名称和值构造Application变量:Application["Nmae"]="Value(Or Object)";
2.在目的页面的代码使用Application变量取出传递的值。Result = Application["Nmae"]
注意:常用lock和unlock方法用来锁定和解锁,为了防止并发修改。
例子:(1)a.aspx
private void Button1_Click(object sender, System.EventArgs e) { Application["name"] = Label1.Text; }
(2)b.aspx
private void Page_Load(object sender, EventArgs e) { string name; Application.Lock(); name = Application["name"].ToString(); Application.UnLock(); }
五、Server.Transfer
这个才可以说是面象对象开发所使用的方法,其使用Server.Transfer方法把流程从当前页面引导到另一个页面中,新的页面使用前一个页面的应答流,所以这个方法是完全面象对象的,简洁有效。
Server.Transfer是从当前的ASPX页面转到新的ASPX页面,服务器端执行新页并输出,在新页面中通过Context.Handler来获得前一个页面传递的各种数据类型的值、表单数据、QueryString.由于重定向完全在服务器端完成,所以客户端浏览器中的URL地址是不会改变的。调用Server.Transfer时,当前的ASPX页面终止执行,执行流程转入另一个ASPX页面,但新的ASPX页面仍使用前一ASPX页面创建的应答流。
ps:比较Server.Transfer和Response.Redirect的区别。
(1)Server.Transfer在服务器端完成,所以客户端浏览器中的URL地址是不会改变的;Response.Redirect是客户端完成,向服务器端提出新的页面处理请求,所以客户端浏览器中的URL地址是会改变的。
(2)Server.Transfer在服务器端完成,不需要客户端提出请求,减少了客户端对服务器端提出请求。[2]
(3)Server.Transfer只能够转跳到本地虚拟目录指定的页面,也就是工程项目中的页面,而Response.Redirect则十分灵活,可以跳转到任何URL地址。
(4)Server.Transfer可以将前一个页面的各种类型的值传到新的页面;Response.Redirect则只能借助URL中带参数或是结合上面四种办法把各种类型的值传到新的页面。
优点:1.直接在服务器端重定向,使用简单方便,减少了客户端对服务器端提出请求。
2.可以传递各种数据类型的值和控件的值。
缺点:1.客户端浏览器中的URL地址是不改变,会导致在新的页面可能出现一些意想不到的问题。比如如果源页面和目的页面不在同一个虚拟目录或其子目录下,那么使用相对路径的图片、超链接都会导致错误的指向。
使用方法:1.在源页面的代码中,使用Page类的Server.Transfer跳到另一个页面传递页面数据:Server.Transfer("b.aspx","false")。
2.在目的页面中,使用Context.Handler来接收数据:FormerPage formerPage = (FormerPage)Context.Handler; 然后用formerPage的属性和方法来获取前一个页面的值,或者直接用Context.Items["myParameter "]
例子:(1)a.aspx
public string Name { get{ return Label1.Text;} } private void Button1_Click(object sender, System.EventArgs e) { Server.Transfer("b.aspx"); }
(2)b.aspx
private void Page_Load(object sender, EventArgs e) { a newWeb; //实例a窗体 newWeb = (source)Context.Handler; string name; name = newWeb.Name; }
Voici plusieurs méthodes couramment utilisées pour transférer des valeurs entre des pages dans ASP.NET. J'utilise généralement une session et une chaîne de requête pour transférer des valeurs. Dans quelques cas, des cookies sont utilisés. Cet article présente uniquement comment utiliser ces méthodes. Il n'y a pas beaucoup d'explications sur les principes internes. Pour la méthode de stockage de session, veuillez consulter : Méthode de stockage de session et fichier de configuration