夜鹰教程网-程序员的加油站
 当前位置:文章中心 >> Asp.net专题(WCF/WPF/WF)
什么是IsPostBack ——续
夜鹰教程网 来源:www.yyjcw.com 日期:2016-11-16 16:34:57
上篇文章中讲了关于Page类的IsPostBack属性的相关知识,并引发了思考。本文中,将借助实例,来帮助大家更好的理解WebForm中的这些知识,相信读者会有意外的收获。

上篇文章中讲了关于Page类的IsPostBack属性的相关知识,并引发了思考。本文中,将借助实例,

来帮助大家更好的理解WebForm中的这些知识,相信读者会有意外的收获。

WebForm技术,看起来简单,做起来也看似很简单,但你真正深入去思考,去探索,会发现其非常非常的复杂。

好了,首先借助一个实例,来探索当发生“跨页投递”的这种情况时候,当前“响应页面”的IsPostBack和“请求页面”的IsPostBack值。

先建立两个新的aspx(WebForm) 页面,然后在其中一个页面上(我这里用WebForm2.aspx页面),拖入一个服务端的Button按钮,将其PostBackUrl属性设置,如下

[csharp] view plaincopyprint?
  1. <asp:Button ID="Button1" runat="server" Text="Button" PostBackUrl="~/WebForm1.aspx" />  
我这里就直接用WebForm1.aspx作为“响应页面”,用来响应这个跨页请求。注意一下路径,否则会请求失败的。

 

启动调试后,点击WebForm2.aspx页面上的Button按钮,果然跳进WebForm1.aspx页面的后台了,

监视“响应页WebForm1.aspx”对应的Page类的IsPostBack属性,发现为false。如图:


有的朋友肯定会忍不住问了,那“请求页”WebForm1.aspx对应的Page类的IsPostBack属性呢?提示大家,

使用PreviousPage就可以获取“请求页”对应的Page类啦。

呵呵。结果如下图:

o(∩_∩)o 哈哈。居然是true,好像应正了上文中的总结哦。


接下来,新建一个html页面,将其form表单的属性设置一下,同样是交给webform1.aspx去“处理、响应”,如下:

 

[html] view plaincopyprint?
  1. <form action="WebForm1.aspx?abc=123" method="post">  

再调试进webform1.aspx的后台,监视其IsPostBack属性,不用说了,肯定也是false撒,

值得提醒大家的是,这里就不能用PreviousPage这个属性了。有图为证:

 


细心的朋友会发现,我在设置html页面的form表单属性时,还用url传参了  <form action="WebForm1.aspx?abc=123" method="post">

这样做,是为了讲解下一个问题。也是解答一个网友的疑惑,可能很多人都会疑惑。html代码如下:

[html] view plaincopyprint?
  1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">  
  2. <html xmlns="http://www.w3.org/1999/xhtml">  
  3. <head>  
  4.     <title></title>  
  5. </head>  
  6. <body>  
  7. <!--你们一个个都答非所问,尽扯些没用的.其实你已经指定了method="post",就说明你这个请求是post,并非get/post并存.
  8. 你只是在这次post请求的时候,使用url传递参数,而并非get请求.  
  9. 当这种情况时候,表单项的name和url中的key一样时,优先取url中的,所以会是123-->  
  10. <form action="WebForm1.aspx?abc=123" method="post">  
  11. <input type="text" name="abc" />  
  12. <input type="submit" value="提交" />  
  13. </form>  
  14. </body>  
  15. </html>  

 


在这个html中,指定了action,并使用url传值了。有人会和那哥们儿一样疑惑,这到底是get请求,还是post请求呢?

我可以明确的告诉大家,这是个post请求。只是借助url传值罢了。取值如下:

 

[csharp] view plaincopyprint?
  1. protected void Page_Load(object sender, EventArgs e)  
  2.        {  
  3.            if (!IsPostBack)   
  4.            {  
  5.                 
  6.              string a =  Request.Form["abc"];  
  7.              string b = Request["abc"];  
  8.              string c = Request.QueryString["abc"];  
  9.            }  
  10.            string dd = Request.Form["abc"];  
  11.            string ee = Request["abc"];  
  12.            string ff = Request.QueryString["abc"];  
  13.   
  14.         bool preResult =  PreviousPage.IsPostBack;  
  15.        }  


 



看明白了吗?当Request.QueryString["abc"]和Request.Form["abc"]中具有相同的key值时,但是其对应的value不一样(一个是url中传来的值,一个是form表单提交过来的)那这种情况下,我们使用Request["abc"]取值,到底取得是谁的呢?前面我们也说过,Request[]包含了所有请求信息。。。根据上面的实例推断,其实是QueryString["key"]对应的value优先级更高,我们使用Request["abc"]取到的值,其实是Request.QueryString["abc"]的值,而不是用Request.Form["abc"]取得的form传过来的值。

一般的情况下,只有通过提交form表单传值或者get请求的url传值(即便post表单时候同时也用url在传参,url传值的key也不会那么凑巧和form表单中的元素同名),使用Request["key"]取到的值其实就是Request.Form["key"]的值。同理,使用单纯的get请求时候,使用Request["key的值"],就是Request.QueryString["key"]的值。

好了,今天就讲到这里。后续,我会逐渐积累,由浅入深去给大家讲解更多webform相关的技术(尤其是原理性和比较深层的东西)。

复制链接 网友评论 收藏本文 关闭此页
上一条: Visual Studio 2012 新功能详解  下一条: 什么是IsPostBack
夜鹰教程网成立于2008年,目前已经运营了将近 13 年,发布了大量关于 html5/css3/C#/asp.net/java/python/nodejs/mongodb/sql server/android/javascript/mysql/mvc/easyui/vue/echarts原创教程。 我们一直都在坚持的是:认证负责、一丝不苟、以工匠的精神来打磨每一套教程,让读者感受到作者的用心。我们默默投入的时间,确保每一套教程都是一件作品,而不是呆板的文字和视频! 目前我们推出在线辅导班试运营,模式为一对一辅导,教学工具为QQ。我们的辅导学科包括 java 、android原生开发、webapp开发、商城开发、C#和asp.net开发,winform和物联网开发、web前端开发,但不仅限于此。 普通班针对的是国内学员,例如想打好基础的大学生、想转行的有志青年、想深入学习的程序员、想开发软件的初学者或者业余爱好者等。 就业办针对即将毕业上岗的大四学生,或者打算转行的初级开发工程师。 留学生班针对的是在欧美、加拿大、澳洲、日本、韩国、新加坡等地留学的中国学子,目的是让大家熟练地掌握编程技能,按时完成老师布置的作业,并能顺利地通过考试。 详细咨询QQ:1416759661   夜鹰教程网  基于角色的权限管理系统(c-s/b-s)。
  夜鹰教程网  基于nodejs的聊天室开发视频教程
  夜鹰教程网  Git分布式版本管理视频教程
  夜鹰教程网  MVC+EasyUI视频教程
  夜鹰教程网  在线考试系统视频教程
  夜鹰教程网  MongoDB视频教程。
  夜鹰教程网 Canvas视频教程
  夜鹰教程网 报表开发视频教程
  热点推荐
表单提交中get和post方式的区别有…
解决ASP中UTF-8与GB2312编码转换乱…
asp数组中REDIM的用法(动态数组)…
生成html的新方法ASP
ASP字符串函数大全
ASP生成Word文件的代码
ASP中Randomize随机函数的使用
十天学会ASP教程之第一天:安装调…
自定义的asp日期格式化函数
防范ASP网站漏洞的八大法则之一
十天学会ASP教程之第二天:表单传…
asp中关于从utf8页面到gb2312页面…
ASP教程:实现长文章分页功能
IIS6架设网站的问题总结
五分钟打开 allow_url_fopen 的最…
  最近更新
C# Json数据中的特殊字符导致页面…
博客园是有开发博客查询相关的接口…
C#里面的ref和out区别
C#调用API让声卡发出声音
.NET使用反射读取用户自定义的枚举…
.net操作SqlServer数据库增删改查…
如何将WCF服务部署到远程服务器
对WebApi 实现服务端信息的监控
用WCF生成Restful风格的接口返回 …
只有一个地址如何调用WCF服务
WCF简介
搭一个简单的wcf服务
WCF配置说明
WCF传输的数据量过大问题的解决方…
asp.net大文件分块上传文件秒传断…

关于我们 | 网站建设 | 技术辅导 | 常见问题 | 联系我们 | 友情链接

夜鹰教程网 版权所有 www.yyjcw.com All rights reserved 备案号:蜀ICP备08011740号3