ispostback实现原理 请问 ispostback的实现原理是什么 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 也就是说页面属于get提交时是ispostback为false,如果是post提交是ispostback为true;你把它理解成回滚就ok了。 没啥实现原理,无非是微软的大大们加了几个隐藏表单,用js拦截了一下submit的动作自己看看生成页面的viewstate那几个隐藏表单元素,再看看页面上__doPastback的js函数就清楚了呵呵,这些并不是新鲜玩意,N年前asp的年代人人都这么用,只不过微软把这种大众化的hack技巧,改成了默认的实现 有篇blog,参考:http://www.cnblogs.com/hobe/archive/2008/04/06/1139031.html ispostback 直面意思就是,"是传回来的"当你第一次开这个页面时,很显然,他不是服务器传回来的。所以他不执行。当你在这个页面再次提交信息时,页面把信息传递给服务器,服务器再返回页面信息。这个信息就是服务器传回来的。所以 ispostback就是true经常用在判断输入如 if(!=ispostback) username=""上面的意思是说,如果是首次加载页面,那么用户名设置为空,否则。用户名就是你输入的值。 ispostback 楼主可以理解为“是否回传”,!isPostBack 可以理解为首次加载,你要问原理的话,就是一个属性啊,没什么解释的,页面载入流程你设断点跟踪一下就可以了,理解什么意思就能用! Form的请求 true的时候是第一次请求, <body><form action="Hello2.ashx" ><input type="hidden" name="ispostback" value="true"/><input type="text" name="input"/><input type="submit" value="doPost回发"/></form></body> string ispostback =context.Request["ispostback"]; if (ispostback=="true") { context.Response.Write("这是回发处理,因为有请求信息"); } else { context.Response.Write("直接访问,没有回发"); }//由此可以初步的推出,asp.net中的IsPostBack属性的机制了,揭秘和PostBack相关的技术//根据表单的name,获取表单值。如果ispostback值为true,说明是通过表单提交了信息,而请求进入的 //反之 则是直接访问进入,或者是第一次请求进入. 当然,这只是最基本的原理。asp.net中的回发,还涉及到viewstate等等因素。比如说:1.对于使用Server.Transfer进行迁移时迁移到的页面其IsPostBack=false。2.Post方式如果Request中没有请求值,即Request.Form =null则IsPostBack=false;Get方式如果Request中没有请求值,即Request.QueryString =null则IsPostBack=false。3.如果QueryString或Form虽然有请求值,但是QueryString或Form中的Key没有“__VIEWSTATE”和“__EVENTTARGET”和“__VIEWSTATEFIELDCOUNT”,并且没有键为“null”,值以“__VIEWSTATE”开头并且也没有值为“__EVENTTARGET”的键值对,则IsPostBack=false。我也记不太清楚了 这个问题其实想通了很简单,完全可以从它的名字理解。ispostback:是否是post回来。言下之意:除了自己页控件引用发回传之外其他情况都不属于postback。那么其判别依据也就一目了然了:看数据提交页是不是本页 。如果是就是postback。而第一次访问页面时根本就没有数据提交页,哪来的postback一说,也就自然是!IsPostBack了。哈哈,以上只是个人理解,仅供参考。 IsPostBack实际上就是表单中的隐藏域,它的value固定式true,当用户点击“自加”按钮后,IspostBack同样也被提交到服务器端,处理程序读出了这个值便可以判定页面是被提交的,然后读取提交值作相应处理,如果读不到,则页面时首次进入,我们可以欺骗服务器:直接在浏览器中输入地址http://localhost:1128/IncNum.ashx?IsPostBack=true,则处理程序会把页面当成提交的页面处理。在aspx页面中的IsPostBack就是使用这个原理实现的。 3楼正解,其他都是扯淡.另外,想获得客户端的状态无非两种途径:cookie session,微软将操作cookie和session的步骤隐藏起来了,用着方便了,但是原理就不容易搞明白了 1. 如果根本没有因post命令而提交的表单输入数据,返回false。2. 如果有post命令而提交的表单输入数据,并且其中一个数据标记了跨页访问(CrossPagePostback)的目标,返回true。3. 如果有post表单数据,但是没有跨页访问目标,却有 __ViewState 数据,返回true。4. 如果有post命令,并且没有__ViewState,但是是跨页访问的最终目标页时,返回false。5. 如果上述全都不成立,另外计算 (((this.Context.ServerExecuteDepth <= 0) || ((this.Context.Handler != null) && (base.GetType() == this.Context.Handler.GetType()))) && !this._fPageLayoutChanged) 懒的去看给你说了你也可以参考 http://www.cnblogs.com/hobe/archive/2008/04/06/1139031.html。但是要记住一点,所谓“原理”就是看有没有读过源代码,不是靠瞎猜。所以与其在csdn上去一遍遍乞求“原理”,不如自己养成看源代码的习惯,看教科书书则要选择那些结合了源代码给你讲解的书、而不是入门书,这就行了。 数据库的导出与导入 报表自动套用格式程序 100分求asp.net的商业网站源码 很简单的问题:select max(col) from table where id = "dd",如果没有数据的情况下怎样读取? 求一个这样的分页代码 有关文件夹选项-〉安全选项卡 .net 实现附件下载(在线等) 如何实现一个用户登录后,禁止其他用户用同一ID登录,请高手帮忙! Excel.Application mex = new Excel.ApplicationClass();错误 如何将后台产生的Table表显示到页面上 动态加载大量checkbox的问题 把string字符串像xml一样分解
username=""
上面的意思是说,如果是首次加载页面,那么用户名设置为空,否则。用户名就是你输入的值。
<body>
<form action="Hello2.ashx" >
<input type="hidden" name="ispostback" value="true"/>
<input type="text" name="input"/>
<input type="submit" value="doPost回发"/>
</form>
</body>
string ispostback =context.Request["ispostback"];
if (ispostback=="true")
{
context.Response.Write("这是回发处理,因为有请求信息");
}
else
{
context.Response.Write("直接访问,没有回发");
}//由此可以初步的推出,asp.net中的IsPostBack属性的机制了,揭秘和PostBack相关的技术
//根据表单的name,获取表单值。如果ispostback值为true,说明是通过表单提交了信息,而请求进入的
//反之 则是直接访问进入,或者是第一次请求进入.
我也记不太清楚了
另外,想获得客户端的状态无非两种途径:cookie session,微软将操作cookie和session的步骤隐藏起来了,用着方便了,但是原理就不容易搞明白了
1. 如果根本没有因post命令而提交的表单输入数据,返回false。
2. 如果有post命令而提交的表单输入数据,并且其中一个数据标记了跨页访问(CrossPagePostback)的目标,返回true。
3. 如果有post表单数据,但是没有跨页访问目标,却有 __ViewState 数据,返回true。
4. 如果有post命令,并且没有__ViewState,但是是跨页访问的最终目标页时,返回false。
5. 如果上述全都不成立,另外计算 (((this.Context.ServerExecuteDepth <= 0) || ((this.Context.Handler != null) && (base.GetType() == this.Context.Handler.GetType()))) && !this._fPageLayoutChanged) 懒的去看给你说了
你也可以参考 http://www.cnblogs.com/hobe/archive/2008/04/06/1139031.html。但是要记住一点,所谓“原理”就是看有没有读过源代码,不是靠瞎猜。所以与其在csdn上去一遍遍乞求“原理”,不如自己养成看源代码的习惯,看教科书书则要选择那些结合了源代码给你讲解的书、而不是入门书,这就行了。