由IsPostBack引发的思考(续)

上篇文章中讲了关于Page类的IsPostBack属性的相关知识,并引发了思考。本文中,将借助实例,来帮助大家更好的理解WebForm中的这些知识,相信读者会有意外的收获。

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

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

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

 <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去“处理、响应”,如下:

<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代码如下:

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

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

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

 protected void Page_Load(object sender, EventArgs e)
        {
            if (!IsPostBack)
            {

              string a =  Request.Form["abc"];
              string b = Request["abc"];
              string c = Request.QueryString["abc"];
            }
            string dd = Request.Form["abc"];
            string ee = Request["abc"];
            string ff = Request.QueryString["abc"];

         bool preResult =  PreviousPage.IsPostBack;
        }

看明白了吗?当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相关的技术(尤其是原理性和比较深层的东西)。如果你只是局限于“拖控件绑数据”,请不要关注我,以免浪费你宝贵的时间,谢谢!

 本文出自http://blog.csdn.net/dinglang_2009/article/details/6982906,转载请注名出处。

时间: 2024-08-31 04:56:17

由IsPostBack引发的思考(续)的相关文章

由IsPostBack引发的思考

我看过无数篇讲解webform相关技术文章,其中不乏优秀的.但是据我看来,大多只是"知其然而不知其所以然".主要是教你"如何做",而很少有人会讲解其背后的原理. 这大概和微软的整个技术体系有关.呵呵.当然,这不是本章介绍的重点.本章中,我将借助一个常见的IsPostBack属性,从web本质去讲解,希望能引发读者的思考. 关于IsPostBack的解释,网上一搜,真实铺天盖地的.但我认为,总结的并不完善,而且初学者很容易被搞"晕". 页面第一次加

由百度此次疯狂“屠杀”引发的思考

自从6月22号至今,百度就没有安宁过.也许你与我有同样的感受,8月22日下午,百度官方站长论坛管理员公布,新的算法预计于23日更新.果不出所料,不到几个钟,该条帖子点击率超过5000.翌日,相信很多站长朋友并没有感觉到自己网站有变化,可能就因此松懈了.意料之外的是25日也就是周六,很明显的感觉到网站流量掉了很多,这时候笔者才觉得不妙,肯定有事情发生.于是习惯性的使用站长工具检测一下,想不到网站权重由2变为1.   今日上班检查网站情况,品牌词"东莞现代妇科医院"排名也掉了,其他关键词东

一个社会化营销信徒的自白 微博引发的思考

中介交易 SEO诊断 淘宝客 云主机 技术大厅 拥抱社会化媒体营销时代,首先就要重视人的力量,一切回归到"人"的关系,无论这个"人"是你的消费者.员工还是合作伙伴.我们在谈论社会化营销时大讲要关系,要信任,无关系不传播,无关系不营销.可是什么是关系,如何建立关系维护关系,当我们企业还在以自我为中心,在社会化媒体上做着传统营销的工作,视用户的声音于不顾,高高在上,这样又如何赢得关系赢得社会化营销的胜利. 现在无论是企业还是专业人士关于社会化营销的讨论越来越多了,有质疑

.Net页面局部更新引发的思考_实用技巧

最近在修改以前做的模块,添加一个新功能.整理了下才发现重用率很低,大部分的东西还是需要重新写.功能里用到了局部更新,所有整理一下一路来实现局部更新的解决方案及改进.  我接触的项目开发大多是以Asp.net WebForm开发的,自然会用到UpdatePanel,好处就是开发快.方便,当然产生的问题也是一大堆.然后是Ajax和一般处理程序配合实现异步请求更新.最后就是利用第三方绑定插件优化Ajax请求.  一.UpdatePanel 将需要更新的模块放入UpdatePanel的ContentTe

由&lt;a href = &quot;#&quot; &gt; 引发的思考

原文:由<a href = "#" > 引发的思考 前阵子在一个移动项目中,通过 <a href = "#" >  的方式 绑定click 事件来提交一个表单,由于表单信息比较敏感,于是采用的post 同步提交的方式,原本到也没有什么.后来万恶的PM说 "你这个按钮呀,要固定在底部比较好" ,于是乎就通过 position:fixed 固定到底部了.那么,问题来了 , 在ios 下,虚拟键盘是浮在页面上层的,导致的结果是当

曲演杂坛--一条DELETE引发的思考

原文:曲演杂坛--一条DELETE引发的思考 场景介绍: 我们有一张表,专门用来生成自增ID供业务使用,表结构如下: CREATE TABLE TB001 ( ID INT IDENTITY(1,1) PRIMARY KEY, DT DATETIME ) 每次业务想要获取一个新ID,就执行以下SQL: INSERT INTO TB001(DT) SELECT GETDATE(); SELECT @@IDENTITY 由于这些数据只需保留最近一天的数据,因此建立一个SQL作业来定期删除数据,删除脚

“女硕士网络征婚受骗生子”事件引发的思考

http://www.aliyun.com/zixun/aggregation/17676.html">婚恋网站实名制何去何从?"女硕士网络征婚受骗生子"事件引发的思考 新华网北京12月16日电(记者涂铭.孟菁)近日,北京某媒体刊发题为<征婚女硕士受骗生孩告百合网>的报道,引发社会各界对婚恋网站"实名制"的热议. 事件前因后果如何?百合网是否存在信息审核不严的问题?"实名制"能否有效防范婚恋诈骗?记者先后采访的当事人分

“勒索病毒”肆虐引发的思考

"勒索病毒"以迅雷不及掩耳之势在全世界蔓延,这暴露出我们在网络安全预警和紧急防护机制方面还是后知后觉的,存在不小的漏洞 自5月12日以来,互联网内外一直颇不宁静.因为"勒索病毒"肆虐,全球深陷"网络浩劫".包括中国.俄罗斯.英国.美国在内的150多个国家和地区都被这个顽固的病毒搅得鸡犬不宁. "勒索病毒"是什么鬼?有消息称,该病毒是源自美国国家安全局遭泄露的病毒武器库,这种病毒会通过邮件.网页甚至手机侵入,使文档等资料全部被&

徒弟离职引发的思考

徒弟离职引发的思考                                                                                                        ―――帅宏军  2012年6月25日星期一       人才是咱这个星球上永恒的话题,关于人才的管理更是一门高深的艺术.对于管理,我也一直在不断求索.         就像一个馒头引发的血案一样,所有事情都有个起因.这段思考的起因又是什么呢?     事情的发展是这样的..