Asp.Net页面传值方式总结
在asp.net中新建一个web窗体的表单(form1),在表单中进行提交数据。
form1默认的属性method即提交数据的方法,有两种get和post。通常,如果没有特殊指定,默认为post。action后面为指定接收窗体的url,即用户提交数据后,利用那个页面来接收显示。
1、get和post
get:获取。我们在使用的时候,在传值时,利用querystring属性,来将查询到的结果作为string返回给客户端。
在地址栏中会将参数赋值给http://blog.csdn.net/wangyy130/article/details/url用“?”隔开,进行传值。因此所要传递的参数将暴露给用户。可想而知,这样很不安全。
具体使用:
新建一个login.aspx(起始页), html代码:
webform1.aspx页面来接收login.aspx提交的数据-->那么,在接收的窗体代码中,需要写明接收的具体数据,和所要进行的具体操作,在这里利用get的method,所以用到querstring这个属性来获取。用户名: 密码:
如下:webform1.aspx.cs中代码
string username = request.querystring["txtusername"]; //获取对应控件中的内容,这里文本框,需输入文本框的name string password = request.querystring["txtpassword"]; response.write("您输入的用户名为:" + username +"您输入的密码为"+password);运行login .aspx后,在webform1.aspx页面中就能看到想要的页面了。
post:传值时,利用request.form来进行获取数据。在传值时,参数并不直接显示在浏览器的地址栏中,因此相对更安全。
具体使用:
html表单代码,控件内容和属性名称不变。这里仍用webform1来进行接收
在webform1.aspx.cs中代码如下:
string username = request["txtusername"].tostring(); string password = request["txtpassword"].tostring(); response.write("您输入的用户名为:" + username +"您输入的密码为"+password);在这里,post获取数据书写格式还可以为:
stringusername=request.form.get["txtusername"].tostring();//密码同理或者
stringusername=request.form["txtusername"].tostring();那么通过以上的小例子,运行后,看一下结果
login.aspx页面:
利用get方法提交后的页面:
将该地址复制下来:
http://localhost:6186/webform1.aspx?__viewstate=f%2flyu9jjce%2bdvcxjs%2bc4w44xolwk0t6t8aek9sdfe%2bql7ohruw51avmps0upch2tmb7hcnq8bcu8zpgkvancsdgoexksqq8uhzhdiyqvocq%3d&txtusername=123&txtpassword=123&button1=%e6%8f%90%e4%ba%a4&__viewstategenerator=c2ee9abb&__eventvalidation=c9fdalfhbwzc0ndmny0h2oeojh8ggwkg2l54ydj2g%2fzayafhpbh%2ffozif5hht6fvwnmypnrjdfrj6trkkdvsgpbqyxhx72zdol2wb9oyujpzzojk7ikj2svo2phgxoygkyn7wjlkmsy5298laupx30anjlc%2fy0fzrmwx5d6ni%3d
可以发现,它将要传的参数加在了目的url的后面。而利用post提交后的界面:如下图,很简单,和起始页login.aspx页面的地址是一样的。
注意:在这里的小例子中以txtbox控件为例,在传值时,利用了textbox控件name,而当我们使用repeater或者gridview进行数据绑定后,进行传值时,可以直接利用中的字段名来进行传值。
小结:通过上述,大概了解get和post的区别,在利用get方法提交时,涉及到很多的url传值,下面有关于url页面转向的几种类型。
url转向页面
利用url传值,主要有
response.redirect("http://blog.csdn.net/wangyy130/article/details/url");
server.transfer
此二者转向页面的方式所体现的功能很类似,都能直接转向另一个页面,但是transfer方法可以实现对象传值,即在提交页面代码中可以声明一个对象及具体属性(类似于三层中实体属性的一个声明),在转向页面中即可调用前一个页面中对象的属性了。
server.execute:目前还没用过,作用:服务器端去执行另一个页面,控制权返回当前页面。
server.execute方法允许当前的aspx页面执行一个同一web服务器上的指定aspx页面,当指定的aspx页面执行完毕,控制流程重新返回原页面发出server.execute调用的位置——相当于调用本身页面的一个函数
上面几种是在代码中实现页面转向,此外还可以利用html标记实现例如
二、公共传值方式
1、application
针对整个应用程序的全局变量。
利用它进行传值时,跟哈希表有些类似。如下几种方式为一个key值赋值value
application["key"]=value; application["key",value]; application["key"]-----默认object类型,真正存储的是对象
通常在使用application时,为防止并发操作时发生冲突,需要对它进行加锁。如下,对其进行调用:
application.lock(); //加锁 string a =convert.tostring(application["key"]); .....具体操作 application.unlock()//解锁在使用application时在application_start事件中对所想声明的变量进行定义,在end事件中结束
例如:计算上网总人数和当前在线人数中在start事件中进行声明,同时可以和数据库进行连接使用。
protected void application_start(object sender, eventargs e) { sqlconnection conn = new sqlconnection("server=.;database=login;uid=sa;pwd=123456;"); conn.open(); sqlcommand cmd = new sqlcommand("select * from countpeople", conn); int count = convert.toint32(cmd.executescalar()); conn.close(); application["total"] = count ; //总人数 application["online"] = 0;//在线人数 }在end事件中如下:
protected void application_end(object sender, eventargs e) { sqlconnection conn = new sqlconnection("server=.;database=login;uid=sa;pwd=123456;"); conn.open(); //更新数据库 sqlcommand cmd = new sqlcommand("update countpeople set num="+application ["total"].tostring (), conn); int count = cmd.executenonquery(); conn.close(); }
2、session传值
session会话,使得所传的值在规定时间内始终存在,但是它主要针对于当前登录的用户,即针对个人,存储用户的身份信息等。也为object类型,使用时,需要强制转换。它的使用类似于application。但在使用时,可对session进行移除,利用remove方法执行。
在对session进行操作时,同样以session_start开头,end结尾。
接着上面的例子进行,当用户登录页面时
protected void session_start(object sender, eventargs e) { session.timeout = 1; application.lock(); application["total"] = (int)application["total"] + 1; //总上网人数+1 application["online"] = (int)application["online"] + 1;//在线人数+1 application.unlock(); }当用户下线时
protected void session_end(object sender, eventargs e) { application.lock(); application["online"] = (int)application["online"] - 1; //在线人数-1 application.unlock(); }
三、cookie方式
对应于session,为客户端用户信息的存放方式,暂时没怎么接触过,抄了一段代码帮助理解。使用前需要用到httpcookie类
string loginid = this.txtlogin.text.trim(); httpcookie cookie = new httpcookie("username", loginid); //两个参数一个声明绑定的字段,另一个具体的值 response.cookies.add(cookie);还可以使用jquery的传值方式,还没有学,待以后深入。
总结:以上是视频中学习到的有关asp.net涉及的传值方式,其实还有很多,比如;previouspagetype等,可直接调用前一个页面的内容等。初步学习,很多还没有实践过,先总结这么些,待以后深入吧。
上一篇: html5的结构标签有利于seo