Heim > Artikel > Backend-Entwicklung > Mehrere Möglichkeiten zum Übertragen von Werten zwischen ASP.NET-Seiten
Seitenwertübergabe ist ein Problem, mit dem man in den frühen Phasen des Lernens von asp.net konfrontiert ist. Im Allgemeinen gibt es die Übergabe von Seitenwerten, Speicherobjektwerten, Ajax, Klassen, Modellen, Formularen usw. Aber im Allgemeinen sind die am häufigsten verwendeten einfacheren QueryString, Session, Cookies, Application und Server.Transfer. Bei Vorstellungsgesprächen stoßen wir häufig auf solche Fragen. Tatsächlich sind wir mit mehreren dieser Methoden vertraut, da sie häufig in Projekten eingesetzt werden. Es wird jedoch geschätzt, dass es oft schwierig ist, die Methode der Seitenwertübertragung in ASP.NET umfassend zu beantworten.
1. QueryString
QueryString ist eine sehr einfache Möglichkeit, Werte zu übergeben. Es kann den übertragenen Wert in der Adressleiste des Browsers anzeigen. Diese Methode kann bei der Übergabe eines oder mehrerer Werte mit geringen Sicherheitsanforderungen oder einfacher Struktur verwendet werden. Für die Übergabe von Arrays oder Objekten kann diese Methode jedoch nicht verwendet werden.
Vorteile dieser Methode: 1. Sie ist einfach zu verwenden und sehr effektiv für die Übertragung von Zahlen oder Textwerten, wenn die Sicherheitsanforderungen nicht hoch sind.
Nachteile dieser Methode: 1. Mangelnde Sicherheit, da ihr Wert in der URL-Adresse des Browsers offengelegt wird.
2. Objekte können nicht übergeben werden.
Verwendung: 1. Konstruieren Sie die URL-Adresse mit dem Namen und Wert, die im Code der Quellseite übergeben werden müssen.
2. Verwenden Sie Response.Redirect(URL); im Quellseitencode, um zur oben genannten URL-Adresse umzuleiten.
3. Verwenden Sie Request.QueryString["name"] im Code der Zielseite, um den in der URL-Adresse übergebenen Wert abzurufen.
Beispiel:(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. Sitzung
Dies dürfte die häufigste Verwendung sein. Die Funktionsweise ähnelt der der Anwendung und funktioniert bei einzelnen Benutzern. Daher führt übermäßiger Speicher zur Erschöpfung der Serverspeicherressourcen.
Vorteile: 1. Einfach zu verwenden, kann nicht nur einfache Datentypen, sondern auch Objekte übergeben.
2. Die Datenmenge ist nicht begrenzt.
Nachteile: 1. Das Speichern einer großen Datenmenge in Sitzungsvariablen verbraucht mehr Serverressourcen.
2. Leicht zu verlieren.
Verwendung: 1. Erstellen Sie den Namen und Wert, den Sie im Code der Quellseite übergeben müssen, um die Sitzungsvariable zu erstellen: Session["Name"]="Value(Or Object )";
2. Verwenden Sie die Session-Variable im Code auf der Zielseite, um den übergebenen Wert abzurufen. Ergebnis = Sitzung["Nmae"]
Hinweis: Sie können die Sitzung zerstören, wenn sie nicht verwendet wird. Die Methode zur Zerstörung ist: Löschen Sie eine: Session.Remove("Sitzungsname ");
Alles löschen: Session.Clear();
Beispiel: (1)a.aspx
(2) b.aspx
private void Button1_Click(object sender, System.EventArgs e) { Session["name"] = Label.Text; }
private void Page_Load(object sender, EventArgs e) { string name; name = Session["name"].ToString(); }
3. Cookie
Dies ist auch eine häufig verwendete Methode, um kleine Informationen im Browser des Benutzers zu speichern und benutzerbezogene Informationen, wie z. B. Benutzerbesuche, zu speichern usw. kann der Benutzer bei seinem nächsten Besuch vorherige Informationen durch Abrufen abrufen. Cookies können also auch Werte zwischen Seiten weitergeben. Cookies werden über HTTP-Header zwischen dem Browser und dem Server hin- und hergereicht. Cookies können nur Zeichenfolgenwerte enthalten. Wenn Sie in Cookie ganzzahlige Werte speichern möchten, müssen Sie diese zunächst in Zeichenfolgenform konvertieren. Wie die Sitzung gilt sie für jeden Benutzer, es gibt jedoch einen wesentlichen Unterschied: Das Cookie wird auf der Clientseite gespeichert, während die Sitzung auf der Serverseite gespeichert wird. Und die Verwendung von Cookies muss in Verbindung mit dem in ASP.NET integrierten Objekt Request verwendet werden.
Vorteile: 1. Es ist einfach zu verwenden und eine sehr verbreitete Methode zur Aufrechterhaltung des Benutzerstatus. Auf einer Shopping-Website kann es beispielsweise verwendet werden, um den Benutzerstatus aufrechtzuerhalten, wenn Benutzer mehrere Seitenformulare umfassen.
Nachteile:
1. Es wird oft dafür kritisiert, dass es zum Schutz der Privatsphäre der Benutzer verwendet wird. 2. Die Sicherheit ist nicht hoch und es ist leicht zu fälschen.
Verwendung:
1. Erstellen Sie den Namen und Wert, den Sie im Code der Quellseite übergeben müssen, um das Cookie-Objekt zu erstellen:
2. Verwenden Sie das Cookie-Objekt im Code der Zielseite, um den übergebenen Wert abzurufen: Ergebnis = Request.Cookies[ "myCookie" ] .Value;
HttpCookie objCookie = new HttpCookie("myCookie","Hello,Cookie!"); Response.Cookies.Add(cookie);
Beispiel:
(1)a.aspx
(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; }
Die oben genannten sind mehrere häufig verwendete Methoden zum Übertragen von Werten zwischen Seiten in ASP.NET. Normalerweise verwende ich Sitzung und Abfragezeichenfolge, um Werte zu übertragen. In diesem Artikel wird nur die Verwendung dieser Methoden erläutert. Informationen zur Speichermethode der Sitzung finden Sie unter: Sitzungsspeichermethode und Konfigurationsdatei