2009-12-07 61 views

回答

40

ASPX:

<input type="hidden" id="_ispostback" value="<%=Page.IsPostBack.ToString()%>" /> 

客户端脚本:

function isPostBack() { //function to check if page is a postback-ed one 
    return document.getElementById('_ispostback').value == 'True'; 
} 

PS:我没有测试过,但我已经做了财产以后前相似,它的工作原理。

+1

作为一个问题或偏好,我添加runat =“服务器”到隐藏的输入,并在代码隐藏文件中更改它的值,但这工作得很好。我会推荐jQuery来做javascript,因为它会变成:function isPostBack(){return $(“#_ ispostback”)。val()=='true';} – 2009-12-07 03:31:40

+0

@Shhnap:是的,我同意。对我来说只是一个懒惰的出路:P – 2009-12-07 03:34:11

+6

为什么要插入''元素呢?你可以让isPostBack()直接返回Page.IsPostBack的值:'return <%= Page.IsPostBack%>;' – RickNZ 2009-12-07 10:23:16

0

如果您使用的是AJAX请求或者有一个JavaScript页面加载时读取的隐藏字段,则只能跟踪回发。否则,页面重新生成并且所有POST数据丢失;正如你所期望和希望的那样。

4

如下图:

<script type="text/javascript"> 

function invokeMeMaster() { 

var chkPostBack = '<%= Page.IsPostBack ? "true" : "false" %>'; 

if (chkPostBack == 'false') { 

alert('Only the first time'); 

} 
} 



window.onload = function() { invokeMeMaster(); }; 

</script> 
+0

我爱你的名字。 – pqsk 2013-07-23 18:28:55

+0

这段代码没有意义。 'chkPostBack'是一个字符串变量... – pkr298 2016-08-22 20:51:55

8

如果要检查,如果用户点击提交按钮将当前页面是否会回传,你可以检查的ViewState的存在:

<input type="hidden" name="__VIEWSTATE" id="__VIEWSTATE" value="xxxxx" /> 

你可以使用像document.getElementById("__VIEWSTATE")或jQuery等价物。

但是,如果您想查看当前页面是否生成以响应回发,那么您需要首先将该数据插入服务器端的页面。

例如:

function isPostBack() { 
    return <%= Page.IsPostBack %>; 
} 
+0

你走了。 +1 :) – 2009-12-07 14:27:46

+0

如果您无法访问服务器端代码并​​且不允许使用代码块,则会下降。 – 2017-08-08 20:11:04

+0

奇怪的是,这并不对我的工作,但这样做:\t \t \t功能的IsPostBack(){ \t \t \t \t变种RET = '<%= Page.IsPostBack%>' == '真'; \t \t \t \t return ret; \t \t \t} – Zeek 2017-10-13 12:21:29

17

在某些情况下,你可能要检查的回传,没有任何服务器端代码。例如,在SharePoint中,您不能在SharePoint Designer页面中拥有代码块,因此您无法使用任何需要%=%=%的解决方案。这里不涉及服务器端代码的替代:

​​

一个警告(或功能,这取决于你如何看待它),这将检测不只是回发,但任何情况下,其中的网页链接到自己。

+0

这适用于SharePoint 2010 - 列表中的JavaScript。 – FAA 2013-07-19 23:38:47

+0

它在某些情况下工作。 – Shawn 2014-01-13 23:44:21

+0

var offset = document.location.href.indexOf(“。aspx”); 回报document.referrer.substring(0,偏移+ 5)== document.location.href.substring(0,偏移+ 5) – Shawn 2014-01-13 23:51:45

5

由于JavaScript的不应该与服务器端的代码编写,并注入新的元素到页面看起来矫枉过正,在我看来,最简单的解决办法是[datat-*]属性添加到<head>元素:

在Page_Load中:

的jQuery:
Page.Header.Attributes["data-is-postback"] IsPostBack ? "true" : "false"; 

这可以被作为访问

$('head').data('isPostback'); 
香草JS:
document.head.getAttribute('data-is-postback') === 'true'; 

当然,如果你对待[data-is-postback]属性为布尔属性,你可以选择使用:

在Page_Load中:
if (IsPostBack) 
{ 
    Page.Header.Attributes.Add("data-is-postback", ""); 
} 
else 
{ 
    Page.Header.Attributes.Remove("data-is-postback"); 
} 
jQuery的:
$('head').is('[data-is-postback]'); 
香草JS:使用jQuery
document.head.hasAttribute('data-is-postback') 
+0

如果你访问服务器端代码,这很好,但如果你不这样做,它会下降。有些软件甚至不允许代码块,那么就需要一个纯JavaScript解决方案。 – 2017-08-08 20:08:58

0

这里是解决方案:

$("a[href^='javascript:__doPostBack']").click(function() { 
    alert('ok'); 
}); 
4

我必须为我工作的解决方案。

// Postback catch 
var prm = Sys.WebForms.PageRequestManager.getInstance(); 
prm.add_endRequest(function (s, e) { 
    alert("post back"); 
}); 
+0

它仅适用于AJAX异步请求 – devi 2016-03-22 20:25:25

0

对你的服务器端的Page_Load: 下面使用的RegisterClientScriptBlock(),将围绕着我们的字符串所需的脚本标记

服务器端

if (Page.IsPostBack){ 
    ClientScript.RegisterClientScriptBlock(GetType(), 
      "IsPostBack", "var isPostBack = true;", true); 
} 

然后过载在为onLoad运行的脚本中,检查是否存在该变量。

if (isPostBack){ 
    //do something here 
} 
0

使用bodyonloadfunc去检查客户端回发

function bodyonloadfunc() { 
alert("Postback"); 
} 
+0

考虑做出更多的扩展答案。 – Sam 2018-01-16 07:47:46

+0

@Sam bodonloadfunc是一个JavaScript函数,它在页面回发时调用。 – 2018-01-18 11:06:34