细说ASP.NET页面间数据传递的几种方法

如题所述

第1个回答  2016-11-24
1.通过 <a> 链接传参就是get方式,会把参数显示在地址栏,不太安全
如果你不想把传递的东西显示在地址栏,那么只有通过form的action="psot"跳转到另外一个页面
2.只要这个form有action地址,那么点击这个form中的按钮就会触发跳转到这个地址,
此时不管method是get还是post,在这个页面后台都可以接受该表单发送的值
get:string id = Request.QueryString["name"];
post:string id2 = Request.Form["name"];
通用:string id3 = Request.Params["name"];
Request.Params是所有post和get传过来的值的集合,request.params其实是一个集合,
它依次包括 request.QueryString、request.Form、request.cookies和request.ServerVariable。
3.asp.net页面可以有多个form,但是只可以有一个runat="server"的form表单
那么其他的form表单里面就不能有runat="server"了,自然这些表单里面不能有runat="server"的控件了,其中里面的文本框,按钮等等就只能通过html来实现了
3.<asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>
一个带有runat="server"的控件才是后台.cs能够获得到的,唯一标识符是ID,通过ID获取,大写可以和html的id区别开来好看(虽然这个ID可以写成id);asp.net自带的控件runat="server"必须写。因为其实TextBox控件在浏览器源码查看中也是input,但是如果不加runat="server"声明它是asp.net服务器控件,不会被解析成input给浏览器认识,然后浏览器变成文本框等等展现出来(可能说的不够对,具体就是这个意思,我这么理解的)
4.<input type="text" value="html标签" id="textbox1" name="textBox1"/>
(id和name有意这么写的,为了和区分,后面有用)
一个一般的html标签后台.cs是获取不了的,此时自能通过前台来操作比如:javascript,唯一标识符是id,通过id获取,不能写成ID;它可以加runat="server",让他在后台跑起来,变成服务器控件,虽然runat="server"的控件ID名称不能和html元素的id同名,因为Id是前台页面获得它们的唯一标识符。
当一个input标签(或者说html标签)没有runat="server"的时候,在.cs接收页面用name来接收,string text = Request.Params["textBox1"]; //name
有runat="server"的时候,一旦成为服务器控件了,name就没有效果了,在后台就是用id了,必须用id来接收,不然报错
string text = Request.Params["textbox1"]; //id
那么有一个问题,我们知道id是唯一的,相当于人的身份证号码,但是name可以相同,相当于人的名字,如果不写runat="server",页面有同名的name,然后通过name值来接收,接收会怎么样呢?
结果是他们都会被接收,中间用英文半角逗号隔开,形成一个新的字符串,我们可以通过,分隔符来一一分割获得
5.一个form默认的action是自己本身的页面,meoth是post,也就是说,
你不写action和method,点击form中的按钮就是跳转到本页面,而且地址栏没有"?参数"
那不就是页面刷新的效果嘛
以上是我刚不久百度和查资料,然后自己测试以后,写的总结,楼主也可以自己写些小例子测试和验证一下,如有错误欢迎指出,大家共同学习。