ASP页面传值
- 格式:doc
- 大小:62.00 KB
- 文档页数:9
asp传参数的方法dadaV2016.02.15asp传参数的方法常用的有三种:1、用户端用http方式传参数到服务器(FORM表单方式)用表单的action属性,将参数传递到接收的文件中。
<form action="test.asp" method="get">//test.asp 为接收参数的页面,method为传送方式,分post方式和get方式。
2、用链接传递参数 <a href='test.asp?name=bansi&sex=man'> 会员</a>href后面的属性首先跟的是一个提交到后台处理的asp文件,"?"后面跟的是参数,参数值是在"="后面。
当多个参数时,使用"&"将参数隔开。
这里就有两个参数name与sex,参数值分别为bansi与man。
比如 <a href="test.asp?action=check<%=rs("字段名")%>">使用mid(request("action"),1,5)获取 check使用mid(request(action),5) 获取<%=rs("字段名")%>3、使用<input>标签方式设置为隐藏方式传递一个参数<input type="hidden" name="id" value="<%=request.querystring("id")%>">下一页面使用 request.form("id")获取id参数asp的参数传递和获取设计交互式网页离不开接收用户的输入信息,也即参数传递和获取。
Web页面是无状态的,服务器对每一次请求都认为来自不同用户,因此,变量的状态在连续对同一页面的多次请求之间或在页面跳转时不会被保留。
在用 设计开发一个Web系统时,遇到一个重要的问题是如何保证数据在页面间进行正确、安全和高效地传送, 提供了状态管理等多种技术来解决保存和传递数据问题,以下来探讨。
NET 下的解决此问题的各种方法和各自的适用场合。
页面间数据传递的各种方法和分析1.使用Querystring 方法QueryString 也叫查询字符串,这种方法将要传递的数据附加在网页地址(URL)后面进行传递。
如页面A.aspx 跳转到页面B.aspx,可以用Response.Redirect("B.aspx?参数名称=参数值")方法,也可以用超链接,页面跳转后,在目标页面中可用Ruquest. Querystring ["参数名称"]来接收参数。
使用QuerySting 方法的优点是实现简单,不使用服务器资源;缺点是传递的值会显示在浏览器的地址栏上,有被篡改的风险,不能传递对象,只有在通过URL 请求页时查询字符串才是可行的。
下面通过一个例子来完成传值工作,步骤为:1.在新建的窗体中放置一个button1,两个TextBox1,TextBox2代码如下:private void Button1_Click(object sender, System.EventArgs e){string url;}2、新建一个目标页面命名为Welcome.aspx,放置两个Label1,Label2,在该窗体的Page_Load中添加如下代码:private void Page_Load(object sender, System.EventArgs e){Label1.Text=Request.QueryString["name"];Label2.Text=Request.QueryString["email"];}运行,即可看到传递后的结果了。
aspx页⾯传值--7种⽅式1、get⽅式发送页<form id="form1" runat="server"><div><a href="WebForm2.aspx?name=5">调转到Form2</a><asp:Button ID="button2" Text="跳转页⾯" runat="server" onclick="button2_Click"/></div></form>protected void button2_Click(object sender, EventArgs e){Response.Redirect("WebForm2.aspx?name=5");}接受页 bel1.Text = Request["name"];//bel2.Text = Request.Params["name"];//bel3.Text = Request.QueryString[0];2、post⽅式a\不带 runat="server"形式发送页<form id="form2" action="WebForm2.aspx" method="post"><input name="txtname" type="text" value="lilili" /><input type="submit" value="提交⽹页" /></form>接受页 bel1.Text =Request.Form["txtname"];b\带 runat="server"发送页<form runat="server" id="form3"><input id="btnTransfer" type="button" onclick="post();" runat="server" value="跳转" /></form><form id="form4" method="post"><input type="text" runat="server" id="txtname" value="lili" /></form><script type="text/javascript">function post() {form4.action = "WebForm2.aspx";form4.submit();}</script>接受页 bel1.Text =Request.Form["txtname"];3、Session 和 ApplicationSession["name2"] = "sessontest";Application["name3"] = "applicationtest";bel2.Text =(string)Session["name2"];bel3.Text =(string)Application["name3"];4、静态变量发送页public static string statest="static string";protected void button2_Click(object sender, EventArgs e){Server.Transfer("WebForm2.aspx");}接受页 bel1.Text = WebForm1.statest;5、Context.Handler 获取控件发送页 <asp:TextBox ID="TextBox1" runat="server" Text="lilili"></asp:TextBox><asp:Button ID="button2" Text="跳转页⾯" runat="server" onclick="button2_Click"/> protected void button2_Click(object sender, EventArgs e){Server.Transfer("WebForm2.aspx");}接受页 //获取post传过来的对象if (Context.Handler is WebForm1){WebForm1 poster = (WebForm1)Context.Handler;bel1.Text = ((TextBox)poster.FindControl("TextBox1")).Text;}6、Context.Handler 获取公共变量发送页 public string testpost = "testpost";protected void button2_Click(object sender, EventArgs e){Server.Transfer("WebForm2.aspx");}接受页 //获取post传过来的对象if (Context.Handler is WebForm1){WebForm1 poster = (WebForm1)Context.Handler;bel2.Text = poster.testpost;}7、Context.Items 变量发送页protected void button2_Click(object sender, EventArgs e) {Context.Items["name"] = "contextItems";Server.Transfer("WebForm2.aspx");}接受页 //获取post传过来的对象if (Context.Handler is WebForm1){bel3.Text = Context.Items["name"].ToString(); }。
ASP页面间传递值的方法汇总1. 使用QueryString变量QueryString是一种非常简单的传值方式,他可以将传送的值显示在浏览器的地址栏中。
如果是传递一个或多个安全性要求不高或是结构简单的数值时,可以使用这个方法。
但是对于传递数组或对象的话,就不能用这个方法了。
下面是一个例子:a.aspx的C#代码private void Button1_Click(object sender, System.EventArgs e){string s_url;s_url = "b.aspx?name=" + Label1.Text;Response.Redirect(s_url);}b.aspx中C#代码private void Page_Load(object sender, EventArgs e){Label2.Text = Request.QueryString["name"];}2. 使用Application 对象变量Application对象的作用范围是整个全局,也就是说对所有用户都有效。
其常用的方法用Lock和UnLock。
a.aspx的C#代码private void Button1_Click(object sender, System.EventArgs e){Application["name"] = Label1.Text;Server.Transfer("b.aspx");}b.aspx中C#代码private void Page_Load(object sender, EventArgs e){string name;Application.Lock();name = Application["name"].ToString();Application.UnLock();}3. 使用Session变量想必这个肯定是大家使用中最常见的用法了,其操作与Application类似,作用于用户个人,所以,过量的存储会导致服务器内存资源的耗尽。
1、实验项目名称: 创建一个网站2、实验项目名称: 字体程序3、实验项目名称: 验证控件和FileUpload控件MaxValue:最大值MiniValue:最小值Type:数据类型3、compaerVatidater除了ControlToValidate、ErrorMessage外还有ControlToCompare和Type4、RegularExpressionValidator除了ControlToValidate、ErrorMessage外还有ValidationExpression (二)文件上传控件4、实验项目名称:网站导航与页面之间的传值5、实验项目名称:利用CSS和DIV完成一个美观网页设计一、实验目的学会使用CSS+DIV完成一个网页布局二、实验环境VS2010三、实验方法和实验步骤1、画出框架图2、创建DIV层共6个:<div class="alldiv"><div id="top" class="alldiv">标题Logo栏</div><div id="navigation" class="alldiv">导航栏</div><div id="left" class="alldiv">左边</div><div id="middle" class="alldiv">中间</div><div id="right" class="alldiv">右边</div><div id="bottom" class="alldiv">页脚</div></div>3、CSS控制DIV进行布局.alldiv{width:760px;text-align: center; border: #00ff00 1px solid; }#top6、实验项目名称:利用主题和母版页设计一个美观网页7、实验项目名称:使用SqlConnection完成对数据库的连接8、实验项目名称: 利用完成对数据库额增删改查9、实验项目名称: 完成DropDownList、GridView、DataList 和FormView数据的绑定10、实验项目名称:AJAX技术的使用11、实验项目名称:Jquery:按钮倒数10秒之后才可点击,用于用户注册12、实验项目名称: Web服务:创建立方和和天气的Web服务13、实验项目名称: XML:个人通讯薄的设计与实现二、实验环境VS2010三、实验方法和实验步骤1、xml:文件2、 DTD文件14、实验项目名称:完成网上书店的大框架设计一、实验目的掌握的网站设计流程和模块功能的实现二、实验环境VS2010二、实验方法和实验步骤1、框架图:。
一、填空题(1)ASPX网页的代码储存模式有两种,它们是___和___代码分离模式。
答案:代码分离模式,单一模式(2)当一个Web控件上发生的事件需要立即得到响时,应该将他的属性设置为true。
答案:AutoPostBack(3)请将下列数据(nn)在TextBox控件中显示出来。
Double nn=4512.6;TextBox1.Text=答案:nn.ToString()(4)当需要将TextBox控件作为密码输入框时(要求隐藏密码的代码),应该将控件的TextMode属性设置为.答案:Password(5)下面是一个转移到新网页的指令:Response.Redirect(“”)答案:新网页的Ur1(6)在设计阶段必须将各个验证控件的属性指向被验证的控件。
答案:ControlToValidate(7)下面是设置和取出Session对象的代码。
设置Session的代码是:Session[“greeting”]=“hello wang!”;取出该Session对象的语句如下:string Myvar=;答案:Session[“greeting”].ToString()(8)下面是使用Application对象时防止竞争的代码。
Application.;//锁定Application对象Application[“counter”]=(int)Application[“counter”]+1;Application.;//解除对Application对象的锁定答案:lock(),unlock()(9)废除Session的语句是:。
答案:Session.Abandon()(10)打开文件系统网站时将自动打开一个服务器,这是一个轻量级服务器,可以用来对程序进行检查和调试工作。
答案:开发(11)所谓分布式类就是在多个文件中使用相同的____,相同的____,而且每个类的定义前面都加上____修饰符,编译时编译器就会自动的将这些文件编辑成一个完整的类。
页面之间传递参数的几种方法第一种方法:通过URL链接地址传递send.aspx:protected void Button1_Click(object sender, EventArgs e){Request.Redirect("Default2.aspx?username=honge");}receive.aspx:string username = Request.QueryString["username"];这样可以得到参数值。
第二种方法:通过post方式send.aspx<form id="form1" runat="server" action="receive.aspx"method=post><div><asp:Button ID="Button1" runat="server" OnClick="Button1_Click" Text="Button" /><asp:TextBox ID="username" runat="server"></asp:TextBox> </div></form>receive.aspxstring username = Ruquest.Form["receive"];第三种方法:通过sessionsend.aspx:protected void Button1_Click(object sender, EventArgs e){Session["username"] = "honge";Request.Redirect("Default2.aspx");}receive.aspx:string username = Session["username"];这样可以得到参数值。
[HTML]页⾯间传值的五种⽅法⼀、QueryString传值:1. 这是最简单的传值⽅式,但缺点是传的值会显⽰在浏览器的地址栏中且不能传递对象,只适⽤于传递简单的且安全性要求不⾼的整数值,例如:2. 新建⼀个WEB项⽬,添加⼀个页⾯命名为Test1,在页⾯中添加⼀个Button命名为btnLogin,再添加两个TextBox分别命名为txtUserName 和txtPassWord,添加Button的Click()事件:private void btnLogin_Click (object sender, System.EventArgs e){string url=" Test1.aspx?UserName=" +txtUserName.Text + "&Password=”+txtPassWord.Text+””;Response.Redirect(url);}3. 添加另⼀个页⾯命名为Test2,在页⾯添加两个Lable分别命名为lblUserName和lblPassWord,添加页⾯的Load()事件:private void Page_Load (object sender, System.EventArgs e){lblUserName.Text=Request.QueryString["UserName"];lblPassWord.Text=Request.QueryString["Password"];}4. 把Test1设为起始页,运⾏项⽬在Test1页⾯的⽂本框中输⼊值后点击按钮,就可以在Test2页⾯中显Test1页⾯输⼊的结果。
⼆、Server.Transfer传值:1. 这种⽅式避免了要传递的值显⽰在浏览器的地址栏中,但是⽐较⿇烦,例如:2. 新建⼀个WEB项⽬,添加两个页⾯分别命名为Test1和Test2,在Test1页⾯中添加⼀个Button命名为btnLogin,再添加两个TextBox分别命名为txtUserName和txtPassWord,在Test2页⾯添加两个Lable分别命名为lblUserName和lblPassWord,为Test1添加过程返回txtUserName和txtPassWord的值并添加btnLogin的Click()事件:public string UserName{get{return txtUserName.Text;}}public string Password{get{return txtPassWord.Text;}}private void btnLogin_Click (object sender, System.EventArgs e){Server.Transfer("Test2.aspx");}3. 添加Test2页⾯的Load()事件:private void Page_Load (object sender, System.EventArgs e){Test1 t1; //创建原始窗体的实例t1=( Test1)Context.Handler; //获得实例化的句柄lblUserName.Text= erName;lblPassWord.Text= t1.Password;}4. 把Test1设为起始页,运⾏项⽬在Test1页⾯的⽂本框中输⼊值后点击按钮,就可以在Test2页⾯中显Test1页⾯输⼊的结果。
备注:1.考试题型包括选择题(80分)、填空题(20分)2.考试主要内容范围:上课PPT中涉及到的知识点和本大纲所列知识。
3.闭卷考试。
复习资料一、基础知识点(对应填空题、解答题)(1) ASPX网页的代码储存模式有两种,它们是__代码分离模式_和_单一模式__代码分离模式。
(2) 当一个Web控件上发生的事件需要立即得到响时,应该将它的__AutoPostBack_ 属性设置为true。
(3) 请将下列数据(nn)在TextBox控件中显示出来。
Double nn = 4512.6;TextBox1.Text = nn.Tostring();(4)当需要将TextBox控件作为密码输入框时(要求隐藏密码的代码),应该将控件的TextMode属性设置为Password.(5) 下面是一个转移到目标网页的指令:Response.Redirect(“新网页的Url ”)(6) 在设计阶段必须将各个验证控件的(ControlToValidate)属性指向被验证的控件。
(7) 下面是设置和取出Session对象的代码。
设置Session的代码是:Session[“greeting”]=“hello wang !”;取出该Session对象的语句如下:string Myvar= Session[“greeting”].ToString();(8) 下面是使用Application对象时防止竞争的代码。
Application. ; //锁定Application对象Application[“counter”]=(int) Application[“counter”]+1;Application. ; //解除对Application对象的锁定lock(),unlock()(9) 废除Session的语句是:(Session.Abandon())。
(10) 打开文件系统网站时将自动打开一个(开发)服务器,这是一个轻量级服务器,可以用来对程序进行检查和调试工作。
aspx页面间传递变量的方法及使用范围的讨论不管什么时候,总能看到网上有人在问页面之间怎么传递变量,针对这一情况,我想把所有能想到的传递变量的方法汇总一下,然后再介绍各种方法的使用范围,供大家参考,也希望大家在此给点建议,来帮助后来或刚开始学.net的朋友。
我总共就总结了这么几种方法:(1)Session(2)Cookie(3)Application(4)URL地址中的参数(5)通过隐藏字段来传递数据(6)Server.Transfer(7)通过序列化对象(8)........下面就分别一一介绍:(1)使用Sessionsession对象是用来记录浏览器端的变量,是个别浏览器端专用的变量,对于每一个浏览器访问时都会自动产生一个seseion对象,该对象提供一个存储场所,用来存储仅仅对该访问者在会话的活动期间打开的网页可用的变量和对象。
这样就用可以用来在Web间传递专对单个浏览器端使用的数据。
其定义方法:session(“变量名”)=数值如:Session["testTransmitVaraint"] = "testSession";session对象所定义的变量只是浏览器端的专用变量,所以适用于局部会话间的网页数据传递。
(2)使用Cookiecookie是在浏览页面时Web服务器在浏览器端所写入的一些小文件,cookie是存放在浏览器端本机磁盘上,而不是存放在服务端的。
可以在发送数据时写入cookie,接收时读取cookie完成数据在Web页面间的传送。
发送页面HttpCookie cookie = new HttpCookie("testCookie");cookie.V alue = TextBox1.Text;Response.SetCookie(cookie);取Cookie页HttpCookie cookie = Request.Cookies["testCookie"];Response.Write("<br>HttpCookie = " cookie.Value);(3)使用Applicationapplication对象是用来记录整个网站信息的,是记录不同浏览器端共享的变量,无论有几个浏览者同时存取网页,都只会产生一个application对象实例。
最全的POST提交数据和接收数据——(1)⽤url传参⽅式//1、对象提交,字典⽅式//接⼝⽅:public ActionResult GetArry(Car model)public void PostResponse(){HttpWebRequest req = (HttpWebRequest)HttpWebRequest.Create("/appapi/apiaccount/aa");Encoding encoding = Encoding.UTF8;//string param = "UserName=123&UserPwd=123";//post 参数Car c = new Car();c.Passed = 1;//truec.LinkTel = "⼩测试";c.CarBrand = "11111111";c.Loads = 101;erId = 50;c.SortId = 1;c.CarArea = "11111111";c.CarStateId = 1;c.LinkMan = "1111111111";c.Sfzh = "141124188789786031";c.CarNum = "ABCDE1";c.CarLength = 100;c.DrivingNum = "11111111";c.State = 1;c.CarId = 0;c.CarOwner = "111111";c.CarAreaId = 1;c.CarTypeId = 1;c.AddTime = DateTime.Now;IDictionary<string, string> para = new Dictionary<string, string>();para.Add("LinkTel", "第⼆次测试");para.Add("CarBrand", "1111");para.Add("Loads", "101");para.Add("UserId", "50");para.Add("SortId", "1");StringBuilder buffer = new StringBuilder();int i = 0;foreach (string key in para.Keys){if (i > 0){buffer.AppendFormat("&{0}={1}", key, para[key]);}else{buffer.AppendFormat("{0}={1}", key, para[key]);}i++;}//JavaScriptSerializer ser = new JavaScriptSerializer();//string param = ser.Serialize(c);byte[] bs = Encoding.UTF8.GetBytes(buffer.ToString());string responseData = String.Empty;req.Method = "POST";//req.ContentType = "application/x-www-form-urlencoded;charset=utf-8";req.ContentLength = bs.Length;using (Stream reqStream = req.GetRequestStream()){reqStream.Write(bs, 0, bs.Length);reqStream.Close();}using (HttpWebResponse response = (HttpWebResponse)req.GetResponse()){using (StreamReader reader = new StreamReader(response.GetResponseStream(), encoding)){responseData = reader.ReadToEnd().ToString();}Response.Write(responseData);}}//2、链接⽅式提交数据//接⼝⽅:public ActionResult GetArry(int UserId,string GroupName)//提交参数:string param = "UserId=737&GroupName=⼀杯美酒";//post 参数public void PostMethd(){HttpWebRequest req = (HttpWebRequest)HttpWebRequest.Create("/appapi/apiaccount/GetGroupsByUserId"); Encoding encoding = Encoding.UTF8;string param = "userid=735";//post 参数byte[] bs = Encoding.UTF8.GetBytes(param.ToString());//byte[] bs = new byte[]{};string responseData = String.Empty;req.Method = "POST";req.ContentType = "application/x-www-form-urlencoded;charset=utf-8";req.ContentLength = bs.Length;//return;using (Stream reqStream = req.GetRequestStream()){reqStream.Write(bs, 0, bs.Length);reqStream.Close();}using (HttpWebResponse response = (HttpWebResponse)req.GetResponse()){using (StreamReader reader = new StreamReader(response.GetResponseStream(), encoding)){responseData = reader.ReadToEnd().ToString();}Response.Write(responseData);}}//3、提交数组//接⼝⽅:public ActionResult GetArry(string[] arrpost)//提交参数:string param = "arrpost=737&arrpost=⼀杯美酒";//post 参数public void PostArrMethd(){HttpWebRequest req = (HttpWebRequest)HttpWebRequest.Create("http://localhost:7242/appapi/apiaccount/GetArry");Encoding encoding = Encoding.UTF8;string param = "arrpost=737&arrpost=⼀杯美酒";//post 参数byte[] bs = Encoding.UTF8.GetBytes(param.ToString());//byte[] bs = new byte[]{};string responseData = String.Empty;req.Method = "POST";req.ContentType = "application/x-www-form-urlencoded;charset=utf-8";req.ContentLength = bs.Length;//return;using (Stream reqStream = req.GetRequestStream()){reqStream.Write(bs, 0, bs.Length);reqStream.Close();}using (HttpWebResponse response = (HttpWebResponse)req.GetResponse()){using (StreamReader reader = new StreamReader(response.GetResponseStream(), encoding)){responseData = reader.ReadToEnd().ToString();}Response.Write(responseData);}}//4、提交数组对象//接⼝⽅:public ActionResult GetArry(List<Car> arrpost)/* 对象public class Dasa{public Dasa() { }private string name;public string Name{get { return name; }set { name = value; }}private int age;public int Age{get { return age; }set { age = value; }}}*///提交参数:string param = "arrpost[0].Name=737&arrpost[0].Age=23&arrpost[1].Name=⼀杯美酒&arrpost[1].Age=25";//post 参数public void PostArrObjMethd(){HttpWebRequest req = (HttpWebRequest)HttpWebRequest.Create("http://localhost:7242/appapi/apiaccount/GetArry");Encoding encoding = Encoding.UTF8;string param = "arrpost[0].Name=737&arrpost[0].Age=23&arrpost[1].Name=⼀杯美酒&arrpost[1].Age=25";//post 参数byte[] bs = Encoding.UTF8.GetBytes(param.ToString());//byte[] bs = new byte[]{};string responseData = String.Empty;req.Method = "POST";req.ContentType = "application/x-www-form-urlencoded;charset=utf-8";req.ContentLength = bs.Length;//return;using (Stream reqStream = req.GetRequestStream()){reqStream.Write(bs, 0, bs.Length);reqStream.Close();}using (HttpWebResponse response = (HttpWebResponse)req.GetResponse()){using (StreamReader reader = new StreamReader(response.GetResponseStream(), encoding)){responseData = reader.ReadToEnd().ToString();}Response.Write(responseData);}}#region⽂件提交//上传调⽤⽅法public void upImg(){NameValueCollection nvc = new NameValueCollection();nvc.Add("id", "TTR");nvc.Add("btn-submit-photo", "Upload");HttpUploadFile("/appapi/apiaccount/AddtUser", @"D:\1.jpg", "file", "image/jpeg", nvc);}//5、提交⽂件public string HttpUploadFile(string url, string file, string paramName, string contentType, NameValueCollection nvc){string result = string.Empty;string boundary = "---------------------------" + DateTime.Now.Ticks.ToString("x");byte[] boundarybytes = System.Text.Encoding.ASCII.GetBytes("\r\n--" + boundary + "\r\n");HttpWebRequest wr = (HttpWebRequest)WebRequest.Create(url);wr.ContentType = "multipart/form-data; boundary=" + boundary;wr.Method = "POST";wr.KeepAlive = true;wr.Timeout = 300000;wr.Credentials = .CredentialCache.DefaultCredentials;Stream rs = wr.GetRequestStream();string formdataTemplate = "Content-Disposition: form-data; name=\"{0}\"\r\n\r\n{1}";foreach (string key in nvc.Keys){rs.Write(boundarybytes, 0, boundarybytes.Length);string formitem = string.Format(formdataTemplate, key, nvc[key]);byte[] formitembytes = System.Text.Encoding.UTF8.GetBytes(formitem);rs.Write(formitembytes, 0, formitembytes.Length);}rs.Write(boundarybytes, 0, boundarybytes.Length);string headerTemplate = "Content-Disposition: form-data; name=\"{0}\"; filename=\"{1}\"\r\nContent-Type: {2}\r\n\r\n";string header = string.Format(headerTemplate, paramName, file, contentType);byte[] headerbytes = System.Text.Encoding.UTF8.GetBytes(header);rs.Write(headerbytes, 0, headerbytes.Length);FileStream fileStream = new FileStream(file, FileMode.Open, FileAccess.Read);byte[] buffer = new byte[4096];int bytesRead = 0;while ((bytesRead = fileStream.Read(buffer, 0, buffer.Length)) != 0){rs.Write(buffer, 0, bytesRead);}fileStream.Close();byte[] trailer = System.Text.Encoding.ASCII.GetBytes("\r\n--" + boundary + "--\r\n");。
页面之间传递参数的几种方法一、概述在Web开发中,页面之间传递参数是一个非常重要的问题。
不同的场景下,我们需要使用不同的方法来实现参数传递。
本文将介绍几种常见的页面之间传递参数的方法。
二、URL参数传递URL参数传递是一种比较常见的页面之间传递参数的方法。
通过在URL中添加查询字符串,可以将需要传递的参数值以键值对的形式进行传递。
1. URL编码在将参数值添加到URL中时,需要进行URL编码。
因为URL中只能包含ASCII字符集中的可打印字符(数字、字母和一些符号),如果直接将汉字或其他特殊字符添加到URL中可能会导致乱码或错误。
2. 代码示例以下是一个简单的代码示例,演示如何通过URL参数传递方式实现页面之间的参数传递:// 页面Avar name = "张三";var age = 20;window.location.href = "pageB.html?name=" + encodeURIComponent(name) + "&age=" + age;// 页面Bvar params = window.location.search;if (params.indexOf("?") != -1) {params = params.substr(1);}var arrParams = params.split("&");var objParams = {};for (var i = 0; i < arrParams.length; i++) {var arrKeyValue = arrParams[i].split("=");objParams[arrKeyValue[0]] = decodeURIComponent(arrKeyValue[1]);}console.log(); // 张三console.log(objParams.age); // 20三、表单提交传递参数表单提交是另一种常见的页面之间传递参数的方法。
【Core】给中间件传参数的⽅法最近博客更新频率慢了些,原因有三:其⼀,最近⽼周每星期六都录 Core 的直播,有些内容在视频⾥讲过,就不太想在博客⾥⾯重复。
有兴趣的话可以去⽼周的微博看,或者去⼀直播,直播帐号与微博帐号是绑定的;其⼆,最近⽼周是有些忙,但不是忙写代码的事情。
⽽是忙着“寻宝藏”。
其三,每个星期⾄少也要抽出⼀天的时间,跟妹⼦出去浪。
准确地说,应该叫对象(Object),是通过构造函数认识的,已经顺利运⾏有五个⽉了。
⽬前状态良好,内存占⽤⼩,不烧 CPU。
性能好,不吃硬件。
好了,屁话不多说了。
今天说说如何向中间件传参数的事。
⾸先,⽤宇宙中最通俗的语⾔介绍⼀下啥是中间件。
浏览器或客户端向服务器发出请求后,HTTP 请求会进⼊通信管道,然后由⼀个个中间件来进⾏处理,A 处理完了,交给 B;B 处理完了再交给 C……所有中间件就串成⼀条链,直到最后⼀个中间件(HTTP 404)。
处理完后就把结果返回给调⽤者。
所以说,中间件就是⼀个处理 HTTP 请求的“零件”,⽐如,你可以定义⼀个中间件,对请求中的某些数据进⾏解密或者验证。
或者,你可以定义⼀个中间件来添加⾃⼰定义的 HTTP 头。
中间件在代码中由⼀个 RequestDelegate 委托来表⽰,该委托声明如下。
delegate System.Threading.Tasks.Task RequestDelegate(Microsoft.AspNetCore.Http.HttpContext context)HttpContext 可以保持整个 HTTP 请求上下⽂中的数据与状态,并且在调⽤每⼀个中间件时,会将⾃⾝传递过去。
返回类型为 Task,表⽰⽀持异步等待。
对于代码简单的中间件,可以直接 Use 扩展⽅法,⽐如这样。
e(async (context, next) =>{context.Response.Headers.Add("key", "no key");await next();});next 是指处理链条上的下⼀个中间件,如果没特殊事情,在当前代码处理完后应该调⽤下⼀个中间件。
与Core中页⾯传值的⼏种形式和⽅法简介在开发 以及 Core过程中主要使⽤的页⾯传值的⽅法有以下⼏种:Request.QueryString[] Request.Form[] Session,Cookie Cache Application, Server.TransferDatabase HttpContext的Item属性 Files DataBase等1、Request.QueryString代码如下:protected void getQueryString_Click(object sender, EventArgs e){string QueStr = Request.QueryString["name"];Response.Write(QueStr);}分析:Request.QueryString 获取http查询字符床变量集合。
有两重载即Request.QueryString[string name]和Request.QueryString[int index]两种其中Request.QueryString主要获取url中的“?”之后的参数,例如url: a.aspx?name="nueq",则 Reuqest.QueryString["name"]的值为“neuq”。
2、Request.Form代码如下:protected void getQueryString_Click(object sender, EventArgs e){string strQueForm = Request.Form["TextBox1"];Response.Write(strQueForm);}分析:Request.Form获取窗体变量集合有两重载(⼀般Form表单post提交⾄后台的数据)。
即Request.Form[string name] 和Request.Form[int index],获取表单指定名称的参数值。
浅谈基于的数据采集系统中实现页面传输值的方法摘要:简单分析了数据采集系统的主要功能,针对开发环境和开发技术,着重分析了在基于技术在数据采集系统中,涉及到的页面传输值的几种方法,这些方法在系统运作中被应用到那些功能,用数据值传递流程图说明了这些页面数值传输与数据库交互使用实现站内数据流的例子。
关键词:页面传输表单数据Session Cookie Application 随着企业现代化的建设,数据管理方法在许多方面继续沿用以往的经验,已远不能满足需要。
使用传统的纸质材料记录的管理方式,不免带来储存和查找不便等问题。
建设信息化、现代化的企业,数据管理系统的是重要的一环。
办公地域分散的特点以及跨地区的特点迫切需要信息化的各种数据档案管理,现有一些大的企业管理软件和ERP 类的软件虽然都有相应数据管理模块,但是软件成本比较高,而且并不是很实用,不可能完全满足实际应用的具体需求。
为此笔者的思路是,使用+sql2005的组合实现开发基于网络应用的B/S结构模式的数据采集和管理系统。
1 页面传输配合数据库传输大量数据的程序流程结构本系统应用功能主要用于员工之间,或者员工与管理员之间的设定页面格式的数据采集,例如部门考勤统计表,或者其他简单的需定期采集的数据(如:工时统计表、物料管理单据等)。
数据传输流程如图1所示。
数据库应用系统的设计主要完成数据输入,数据处理及信息输出的整个过程,这中间数据的传输与存储显然是非常重要的部分。
正如图1所示:首先,由作为数据录入端的用户按照所指定格式的表单填写各项所需数据资料并提交;系统按照指令通过一个传输页面将之前提交的数据信息传输到服务器数据库以备共享和后续调用;当具有数据汇总、分析或加工职能的用户通过身份验证登录后,可以通过自己的站内信息了解到数据采集的实时情况,根据自己的各种不同需求点击相应的链接,程序根据指令消息通过链接参数传输值判断需要采集的数据,据此调用数据库中有关已采集的数据信息与之匹配,进行汇总等对应处理;并将处理结果即时响应传输回数据处理页面,完成汇总;最后将结果保存在数据库中。
url传值的长度限制解决⽅法今天写到两个页⾯传值,刚开始通过url上加参数进⾏传值,var strLink = "my.asp?str1=" + str1List + "&str2=" + str2List ;var iHeight = 600; // ⾼度var iWidth = 1000; // 宽度var iTop = (window.screen.availHeight - 30 - iHeight) / 2; // 获得窗⼝的垂直位置;var iLeft = (window.screen.availWidth - 10 - iWidth) / 2; // 获得窗⼝的⽔平位置;window.open(strLink, "_blank", "status=yes,resizable=yes,scrollbars=yes,menubar=yes,width=" + iWidth + ",height=" + iHeight + ",left=" + iLeft + ",top=" + iTop)其中str1List是⼀个单号的列表,str2是另外⼀个单号的列表,将参数传到my.asp,然后⽤Request.QueryString获取参数的值进⾏处理,刚开始my.asp页⾯运⾏没有问题,可是当单号的数据量⽐较⼤的时候,my.asp页⾯就报错。
经过排查,发现参数传到my.asp后,str1List数量少了,str2List没了,才知道应该是url传值时,数据没截掉了。
然后上⽹查了⼀下,发现url是有长度限制了,⽹上是这样说的:通过URL传值的问题,所以对url字符串进⾏encodeURIComponent对url字符串内容进⾏编码,问题解决,但是有时候会出现 The request filtering module is configured to deny a request where the query string is too long,问题的原因是以get⽅式传字符串的时候,有长度限制。
页面之间传递值的几种方式页面传值是学习初期都会面临的一个问题,总的来说有页面传值、存储对象传值、ajax、类、model、表单等。
但是一般来说,常用的较简单有QueryString,Session,Cookies,Application,Server.Transfer。
一、QueryStringQueryString是一种非常简单的传值方式,他可以将传送的值显示在浏览器的地址栏中。
如果是传递一个或多个安全性要求不高或是结构简单的数值时,可以使用这个方法。
但是对于传递数组或对象的话,就不能用这个方法了。
这种方法的优点:1.使用简单,对于安全性要求不高时传递数字或是文本值非常有效。
这种方法的缺点:1.缺乏安全性,由于它的值暴露在浏览器的URL地址中的。
2.不能传递对象。
使用方法:1.在源页面的代码中用需要传递的名称和值构造URL地址。
2.在源页面的代码用Response.Redirect(URL);重定向到上面的URL地址中。
3.在目的页面的代码使用Request.QueryString["name"];取出URL地址中传递的值。
例子:(1)a.aspxprivate void Button1_Click(object sender, System.EventArgs e){string s_url;s_url = "b.aspx?name=" + Label1.Text;Response.Redirect(s_url);}(2)b.aspxprivate void Page_Load(object sender, EventArgs e){Label2.Text = Request.QueryString["name"];}二、Session想必这个肯定是大家使用中最常见的用法了,其操作与Application类似,作用于用户个人,所以,过量的存储会导致服务器内存资源的耗尽。
优点:1.使用简单,不仅能传递简单数据类型,还能传递对象。
2.数据量大小是不限制的。
缺点:1.在Session变量存储大量的数据会消耗较多的服务器资源。
2.容易丢失。
使用方法:1.在源页面的代码中创建你需要传递的名称和值构造Session变量:Session["Name"]="Value(Or Object)";2.在目的页面的代码使用Session变量取出传递的值。
Result = Session["Nmae"]注意:session不用时可以销毁它,销毁的方法是:清除一个:Session.Remove("session名");清除所有:Session.Clear();例子:(1)a.aspxprivate void Button1_Click(object sender, System.EventArgs e){Session["name"] = Label.Text;}(2)b.aspxprivate void Page_Load(object sender, EventArgs e){string name;name = Session["name"].ToString();}三、Cookie这个也是大家常使用的方法,Cookie用于在用户浏览器上存储小块的信息,保存用户的相关信息,比如用户访问某网站时用户的ID,用户的偏好等,用户下次访问就可以通过检索获得以前的信息。
所以Cookie也可以在页面间传递值。
Cookie通过HTTP头在浏览器和服务器之间来回传递的。
Cookie只能包含字符串的值,如果想在Cookie存储整数值,那么需要先转换为字符串的形式。
与Session一样,其是什对每一个用户而言的,但是有个本质的区别,即Cookie是存放在客户端的,而session是存放在服务器端的。
而且Cookie的使用要配合内置对象Request来使用。
优点:1.使用简单,是保持用户状态的一种非常常用的方法。
比如在购物网站中用户跨多个页面表单时可以用它来保持用户状态。
缺点:1.常常被人认为用来收集用户隐私而遭到批评。
2.安全性不高,容易伪造。
使用方法:1.在源页面的代码中创建你需要传递的名称和值构造Cookie对象:HttpCookie objCookie = new HttpCookie("myCookie","Hello,Cookie!"); Response.Cookies.Add(cookie);2.在目的页面的代码使用Cookie对象取出传递的值:Result =Request.Cookies[ "myCookie" ].Value;例子:(1)a.aspxprivate void Button1_Click(object sender, System.EventArgs e){HttpCookie objCookie = new HttpCookie("myCookie","Hello,Cookie!");Response.Cookies.Add(objCookie);}(2)b.aspxstring myName1Value;myName1Value = Request.Cookies[ "myCookie" ].Value;四、ApplicationApplication对象的作用范围是整个全局,也就是说对所有用户都有效。
它在整个应用程序生命周期中都是有效的,类似于使用全局变量一样,所以可以在不同页面中对它进行存取。
它和Session变量的区别在于,前者是所有的用户共用的全局变量,后者是各个用户独有的全局变量。
可能有人会问,既然所有用户都可以使用application变量,那他可以用在什么场合呢?这里举个例子:网站访问数。
多个请求访问时都可以对它进行操作。
优点:1.使用简单,消耗较少的服务器资源。
2.不仅能传递简单数据,还能传递对象。
3.数据量大小是不限制的。
缺点:1.作为全局变量容易被误操作。
所以单个用户使用的变量一般不能用application。
使用方法:1.在源页面的代码中创建你需要传递的名称和值构造Application变量:Application["Nmae"]="Value(Or Object)";2.在目的页面的代码使用Application变量取出传递的值。
Result =Application["Nmae"]注意:常用lock和unlock方法用来锁定和解锁,为了防止并发修改。
例子:(1)a.aspxprivate void Button1_Click(object sender, System.EventArgs e){Application["name"] = Label1.Text;}(2)b.aspxprivate 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.aspxpublic string Name{get{ return Label1.Text;}}private void Button1_Click(object sender, System.EventArgs e){Server.Transfer("b.aspx");}(2)b.aspxprivate void Page_Load(object sender, EventArgs e){a newWeb; //实例a窗体newWeb = (source)Context.Handler;string name;name = ;}以上就是常用的几种页面间传值的方法,我一般使用session和querystring来传值,少数情况会使用到cookie。