Heim > Artikel > Backend-Entwicklung > Detaillierte Erläuterung verschiedener Möglichkeiten zum Übertragen von Werten zwischen ASP.NET-Seiten
Eröffnungsübersicht
Für jeden Anfänger ist die Übertragung von Werten zwischen Seiten der einzige Weg, aber es ist auch eine Schwierigkeit für sie. Tatsächlich dürfte es für die meisten Experten nicht schwierig sein.
Rückblickend auf die fast 300 im Jahr 2016 befragten Personen gab es Praktikanten, frischgebackene Absolventen, Personen mit 1–3 Jahren Erfahrung, Personen mit 3–5 Jahren Erfahrung und Personen mit 5–10 Jahren Erfahrung Ich habe fast allen Befragten die gleiche Frage gestellt: „Erzählen Sie mir bitte die verschiedenen Formen und Methoden der Wertübertragung zwischen Seiten, die Sie kennen, und erläutern Sie deren Prinzipien und Prozesse, basierend auf den Antworten aller.“ Die Ergebnisse sind nicht sehr ideal, die meisten Leute antworten auf etwa 5 Typen, und nur sehr wenige Leute können 8 Typen beantworten. Was die Tiefe betrifft, können jedoch nur wenige Leute eine gründliche Analyse abgeben . Die Prinzipien und Prozesse jeder Methode (um diese Prinzipien und Prozesse gründlich zu analysieren, müssen Sie natürlich die zugrunde liegenden Dinge studieren, wie z. B. den Seitenlebenszyklus und die Seitenprinzipien, Reflexion, wie IIS Anfragen analysiert usw., CLR, GC , Dekompilierung usw. ).
Um eine grobe Zusammenfassung zu geben, können die Methoden zum Übertragen von Werten zwischen ASP.NET-Seiten grob in die folgenden Typen unterteilt werden: Request.QueryString["name"],Request.Form("name") , Sitzung, Cookie, Cache, Anwendung, Server.Transfer, Datenbank, Elementeigenschaften von HttpContext, Dateien, Datenbank usw.
Detaillierte Erläuterung jeder Methode
1. Request.QueryString
Kerncode:
protected void getQueryString_Click(object sender, EventArgs e) { string QueStr = Request.QueryString["name"]; Response.Write(QueStr); }
Zusammenfassung:
1. Request .QueryString: Ruft die Variablensammlung der http-Abfragezeichenfolge ab. Es gibt zwei Überladungen, nämlich Request.QueryString[string name] und Request.QueryString[int index];
2 Request.QueryString ruft hauptsächlich die Parameter nach „?“ in der URL ab .aspx?name="queryString", dann ist der Wert von Request.QueryString["name"] "queryString".
2. Request.Form
Kerncode:
protected void getQueryString_Click(object sender, EventArgs e) { string strQueForm = Request.Form["TextBox1"]; Response.Write(strQueForm); }
Zusammenfassung:
1. Request.Form ruft die Formularvariablensammlung ab. Es gibt zwei Überladungen, nämlich Request.Form[string name] und Requst.Form[int index].
2. Rufen Sie den Parameterwert des angegebenen Namens im Formular ab.
3. Sitzung
A. Sitzung erstellen
b
//创建Session public void createSession(string[] arrStr) { //创建数组 string[] str=new string[arrStr.Length]; for (int i = 0; i < arrStr.Length; i++) { str[i] = i.ToString(); Session[str[i]] = arrStr[i]; } }c. Die Sitzung durchlaufen
string getSessionValue=Session["name"].ToString();d. Die Sitzung beenden, aber nicht beenden
//遍历Session public void getSession() { IEnumerator sessionEnum = Session.Keys.GetEnumerator(); while (sessionEnum.MoveNext()) { Response.Write(Session[sessionEnum.Current.ToString()].ToString()+";"); } }
//清空Session,但不结束会话 public void clearSession() { Session.Clear(); }e. Beenden Sie die Sitzung
//结束Session会话 public void abandonSession() { Session.Abandon(); }2. Form und Speicherort der Sitzungsdaten
<system.web> <sessionState mode="Off|InProc|StateServer|SQLServer" cookieless="true|false" timeout="number of minutes" stateConnectionString="tcpip=server:port" sqlConnectionString="sql connection string" stateNetworkTimeout="number of seconds"/> </system.web>Hinweis :
Modus: Zeigt das Festlegen des Speicherformats und des Speicherorts der Sitzung an.
a. Deaktiviert die Sitzung.
b Die Sitzung wird im IIS-Prozess gespeichert. Beachten Sie jedoch, dass die Sitzungsinformationen verloren gehen, wenn IIS neu gestartet wird.
c .NET-Statusdienstprozess (Sitzung beim Neustart der Webanwendung beibehalten) und den Sitzungsstatus für mehrere Webserver im Netzwerk verfügbar machen);
d. Speichern Sie die Sitzung in SQL Server
Cookielos: Legen Sie fest, dass der Client die Sitzungsform und den Speicherort speichert.
true: Verwenden Sie den Cookieless-Modus. Zu diesem Zeitpunkt werden die Sitzungsinformationen des Clients nicht mehr mithilfe von Cookies gespeichert, sondern über die URL.
b. false: Kookie-Modus verwenden, Standardwert.
Timeout legt die Anzahl der Minuten fest, nach denen der Server die Sitzungsinformationen automatisch aufgibt. Der Standardwert beträgt 20 Minuten;
stateConnectionString legt den Servernamen und die Portnummer fest, die beim Speichern von Sitzungsinformationen im Statusdienst verwendet werden, zum Beispiel: „tcpip=127.0.0.1:42424“. Dieses Attribut ist erforderlich, wenn der Wert von mode StateServer ist. (Standardport 42424);
sqlConnectionString Legt die Verbindungszeichenfolge beim Herstellen einer Verbindung mit SQL Server fest. Zum Beispiel „Datenquelle=localhost;Integrated Security=SSPI;Initial Catalog=joye“. Wenn der Wert von mode SQLServer ist, ist dieses Attribut erforderlich;
stateNetworkTimeout legt fest, wie viele Sekunden der Leerlaufzeit bei Verwendung des StateServer-Modus zum Speichern des Sitzungsstatus die TCP/TCP-Verbindung zwischen dem Webserver und dem Server getrennt wird Das speichert Statusinformationen. Der Standardwert beträgt 10 Sekunden.
3. Sitzungsprinzip
Warum wird Sitzung eingeführt? Wie wir alle wissen, gleicht Session diesen Mangel aus, da http ein zustandsloses Protokoll ist. Natürlich geht die Rolle von Session weit darüber hinaus, daher werde ich hier nicht darauf eingehen.
Sitzung in ASP.NET stellt die Sitzung zwischen dem Client (Goggle, Firefox, IE usw.) dar. Sie wird zum Speichern spezifischer Sitzungsinformationen verwendet Benutzerinformationen. Wenn der Client eine Anfrage an den Server sendet, beispielsweise eine angemeldete Benutzer-ID, und der Server die Anfrage empfängt, generiert die serverseitige Sitzung eine Sitzungs-ID, die sich auf den angemeldeten Benutzer bezieht, und gibt die SessioID an den Client zurück ( Goggle, Firefox, IE usw.) Zu Beginn einer neuen Sitzung speichert der Server die SessionID als Cookie im Browser des Benutzers.
Zusammenfassung:
1. Definition: System.Web.SessionState.HttpSessionState Page.Session //Das von ASP.NET bereitgestellte aktuelle Sitzungsobjekt abrufen.
2. Funktionen:
a. Sitzung bedeutet in ASP.NET die Sitzung zwischen dem Client und dem Server im Netz.
b. Die Sitzung wird im serverseitigen Speicher gespeichert.
c. Die Sitzung kann jede Art von Daten speichern, einschließlich benutzerdefinierter Objekte.
d、Session与Session间是相互独立的,互不干扰。
e、Session与Cookie配对使用,Session在服务器端产生SessionID,并将该SessionID返回给客户端(IE,FireFox,Google等),客户端Cookie来存储该SessionID,整过会话过程中,只要保存SessionID的Cookie不丢失,则Session的信息就不会丢失。
f、Session保存的数据可以跨页访问,即跨页面是全局的。
g、Session不能跨进程访问,只能由该会话用户访问。
h、可以在不结束会话的条件下,清除Session信息,即调用Session.Clear();
i、当会话结束,过期,服务器就会清除Session对象。
j、Session常用于保存登录用户的ID.
四、Application
核心代码:
(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(); }
总结:
1、Application对象的作用范围是整个全局,也就是说对所有用户都有效。它在整个应用程序生命周期中都是有效的,类似于使用全局变量一样,所以可以在不同页面中对它进行存取。它和Session变量的区别在于,前者是所有的用户共用的全局变量,后者是各个用户独有的全局变量。可能有人会问,既然所有用户都可以使用application变量,那他可以用在什么场合呢?这里举个例子:网站访问数。多个请求访问时都可以对它进行操作。
2、优点:使用简单,消耗较少的服务器资源;不仅能传递简单数据,还能传递对象;数据量大小是不限制的。
3、缺点:作为全局变量容易被误操作。所以单个用户使用的变量一般不能用application。
4、在源页面的代码中创建你需要传递的名称和值构造Application变量:Application["name"]="Value(Or Object)";在目的页面的代码使用Application变量取出传递的值。Result = Application["name"]。
5、常用lock和unlock方法用来锁定和解锁,为了防止并发修改。
五、Cache
核心代码:
//Class1 Cache["id"] = TextBox1.Text; Response.Redirect("~/WebForm1.aspx"); //Class2 if (Cache["id"]!=null) { Label1.Text = Cache["id"].ToString(); } //移除缓存 Cache.Remove("id"); //如果 Cache["id"]为空,则传值失败。可使用如下方法实 //限期为10分钟 Cache.Insert("id",TextBox1.Text,null,Cache.NoAbsoluteExpiration,new TimeSpan(0,10,0));
总结:
1、应用程序中的缓存机制用于将需要大量服务器资源来创建的对象存储在内存中,以此大大改进应用程序的性能。这个机制同样可以用来传值。
2、与其他方法不同的是,该方法需要设置缓存项优先级和缓存时间。因为当系统内存缺乏时,缓存机制会自动移除很少使用或优先级较低的项,从而造成传值失败。
3、该方法的优点是传递数据的大小和数量无限制,速度快。缺点是缓存机制的操作相对比较复杂。
六、Cookie
核心代码:
//Class1 HttpCookie httpCookie = new HttpCookie("testCookie","Page transfers by Cookie"); Response.Redirect("~/Class2.aspx"); //Class2 Label1.Text = Request.Cookies["testCookie"].Value;
总结:
1、Cookie用于在用户浏览器上存储小块的信息,保存用户的相关信息,比如用户访问某网站时用户的ID,用户的偏好等,用户下次访问就可以通过检索获得以前的信息。所以Cookie也可以在页面间传递值。
2、Cookie通过HTTP头在浏览器和服务器之间来回传递的。Cookie只能包含字符串的值,如果想在Cookie存储整数值,那么需要先转换为字符串的形式。
3、与Session一样,其是什对每一个用户而言的,但是有个本质的区别,即Cookie是存放在客户端的,而session是存放在服务器端的。而且Cookie的使用要配合ASP.NET内置对象Request来使用。
4、使用简单,是保持用户状态的一种非常常用的方法。比如在购物网站中用户跨多个页面表单时可以用它来保持用户状态。
5、常常被人认为用来收集用户隐私而遭到批评。
6、安全性不高,容易伪造。
七、Context.Items["id"]
核心代码:
//Class1 Context.Items["id"]=TextBox1.Text; Server.Transfer("~/Class2.aspx"); //Class2 Label1.Text=Context.Items["id"].ToString(); Context.Items.Remove("id"); //移除项
1、Context 对象包含与当前页面相关的信息,提供对整个上下文的访问,包括请求、响应、以及上文中的Session 和Application 等信息。
2、可以使用此对象在网页之间共享信息,从而实现页面间的传值。
3、与使用 Form 的方法类似,该方法也能保持大量的数据,缺点也相同,但使用方法相对比较简单。
八、ViewState
核心代码:
//Class1 ViewState["id"]=TextBox1.Text; //数据保存 Label1.Text=ViewState["id"].ToString(); //数据取出 ViewState.Remove("id"); //数据移除
总结:
1、ViewState 是ASP.NET 用来在同一页面的多个请求之间保存和还原服务器控件视图状态的一种机制。与传统的“同一页面”不同,ASP.NET 中“同一页面”的每一个请求都会导致服务器重新生成该页面,但是新生成的页面并不包含原来页面的数据。(页面无状态性)
2、ViewState 的任务就是保存原来页面中服务器控件视图状态的数据供新页面使用。从这个意义上讲,ViewState 也可以看作是一种在页面间传递数据的工具。
3、ViewState 的工作原理是:作为一个隐藏的窗体字段在客户端和服务器之间传递,可见,滥用ViewState 会加重页面回传的负担,从而降低应用程序的性能。
此外,ViewState 也能被控件、页面和应用程序禁用。
九、web.config和machine.config
核心代码:
//Class1 using System.Web.Configuration; WebConfigurationManager.AppSettings.Set("userName",TextBox1.Text); Response.Redirect("~/Class2.aspx"); //Class2 using System.Web.Configuration; Label1.Text = WebConfigurationManager.AppSettings["userName"];
总结:
1、每个Web运用程序继承web.config文件和machine.config文件的设置。
2、web.config和machine.config这两种文件保存数据一般都很小,多为明文,特别适合保存一些字符串常量,如数据库连接信息。此外,web.config文件是可以扩展的,因此,也可以用来传递变量。由于这两种文件会被自动缓存,所以不存在因磁盘IO产生的性能瓶颈等问题。要注意的是文件中某些设置会导致文件被修改后Web运用程序的重启。
3、web.config:你可以向单个Web运用程序运用设置。例如,你可能会希望设置特定的验证方法、调试的类型、默认语言或自定义的错误页面。但如果你要使用这些设置,必须把web.config文件放到web运用程序的根虚拟目录下。要想在Web运用程序中进一步配置自己的子目录,需要 在这些文件夹中放置附加的web.config。(关于ASP.NET web.config文件详细介绍,可参考我另外一篇博客:ASP.NET web.config)
4、machine.config:从c:\Windows\Microsoft.NET\Framework\Framework\[Version]\Config目录中的一个叫macine.config的文件开始 配置。machine.config文件定义支持的配置文件节,配置ASP.NET工作者进程,注册可用于高级特性(如配置文件、成员资格以及基于角色的安全等)提供程序。(关于ASP.NET machine.config文件的详细介绍,我之后会写一篇文章来介绍)
十、Static
核心代码:
//class1 public static string userName;//在class1中定义静态全局变量 userName=txtBoxUserName.Text; Response.Redirect("~/class2.aspx"); //class2 Label1.Text=Src.id;
总结:
1、这个应该是非常容易理解的,在ASP.NET中,每个页面对应一个具体的类,既然如此,那么页面之间的传递,我们就可以归结为:类与类之间数据的传递。想到这一步,问题应该就迎刃而解了, 因为我们可以利用类之间的公关静态变量来解决这个问题。
2、若合理利用,可以有效地提高数据传递效率,但若滥用,可能会导致用户或页面间数据紊乱,存在一定风险和隐患,应谨慎使用。
提出以下问题:大家可以分析一下,以下代码有什么问题?
//Class1 protected void btnRedirect_Click(object sender, EventArgs e) { string userName = txtBoxUserName.Text; Response.Redirect("~/Class2.aspx"); } //Class2 Lable1.Text=userName;
十一、补充常用页面之间跳转
1.最常用的页面跳转(原窗口被替代):Response.Redirect("XXX.aspx");
2.利用url地址打开本地网页或互联网:Respose.Write("3b3250e2fb6fee097dfc5b2401f72300window.open('"+ url+"');2cacc6d41bbb37262a98f745aa00fbf0");
3.原窗口保留再新打开另一个页面(浏览器可能阻止,需要解除):Response.Write("3f1c4e4b6b16bbbd69b2ee476dc4f83awindow.open('XXX.aspx','_blank')2cacc6d41bbb37262a98f745aa00fbf0");
4.效果同1中的另一种写法:Response.Write("3f1c4e4b6b16bbbd69b2ee476dc4f83awindow.location='XXX.aspx'2cacc6d41bbb37262a98f745aa00fbf0");
5.也是原窗口被替代的 (常用于传递session变量的页面跳转):Server.Transfer("XXX.aspx");
6.原窗口保留,以对话框形式打开新窗口:Response.Write("3f1c4e4b6b16bbbd69b2ee476dc4f83awindow.showModelessDialog('XXX.aspx')2cacc6d41bbb37262a98f745aa00fbf0");
7.对话框形式打开新窗口,原窗口被代替:Response.Write("3f1c4e4b6b16bbbd69b2ee476dc4f83awindow.showModelDialog('XXX.aspx')2cacc6d41bbb37262a98f745aa00fbf0");
8.打开简洁窗口:Respose.Write("3b3250e2fb6fee097dfc5b2401f72300window.open('"+url+"','','resizable=1,scrollbars=0,status=1,menubar=no,toolbar=no,location=no, menu=no');2cacc6d41bbb37262a98f745aa00fbf0");
9.利用vs2008端口:System.Diagnostics.Process.Start(http://localhost:3210/系统管理员.aspx);
注释:比较简单,我这里就不论述了。
总结:
关于页面之间传值,还有很多方法,如文件传值、数据库传值,ViewBag等等,在这里就不一一论述了。若以后有时间,将会在此基础上补充,并逐步完善该篇博文。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持PHP中文网。
更多详解ASP.NET 页面之间传值的几种方式相关文章请关注PHP中文网!