如何在JavaScript中检查IsPostBack?

rom*_*n m 47 javascript asp.net

我需要运行一个JavaScript函数onLoad(),但只有在第一次加载页面时才会这样做(即不是回发的结果).

基本上,我需要在JavaScript中检查IsPostBack.

谢谢.

Jas*_*ing 67

服务器端,写:

if(IsPostBack)
{
   // NOTE: the following uses an overload of RegisterClientScriptBlock() 
   // that will surround our string with the needed script tags 
   ClientScript.RegisterClientScriptBlock(GetType(), "IsPostBack", "var isPostBack = true;", true);
}
Run Code Online (Sandbox Code Playgroud)

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

if(isPostBack) {
   // do your thing
}
Run Code Online (Sandbox Code Playgroud)

你不需要设置变量,就像Jonathan的解决方案一样.客户端if语句将正常工作,因为"isPostBack"变量将是未定义的,在if语句中计算为false.

  • 哈哈 - 重复?当你回答时,我也是.我不知道你已经回答了(我们只有一两分钟).它不像是一个独特的解决方案,它实际上是**的方式.顺便说一句,在我回答之后,我对你的评论是一个编辑 - 你可以看到历史 (5认同)
  • 顺便说一句,从代码隐藏使用Page.ClientScript到达ClientScript属性. (4认同)
  • 不,我没有.也许您需要阅读我使用的过载,根据MSDN.:) (3认同)

小智 26

有一种更简单的方法,不涉及在后面的代码中写任何东西:只需将此行添加到您的javascript:

if(<%=(Not Page.IsPostBack).ToString().ToLower()%>){//Your JavaScript goodies here}
Run Code Online (Sandbox Code Playgroud)

要么

if(<%=(Page.IsPostBack).ToString().ToLower()%>){//Your JavaScript goodies here}
Run Code Online (Sandbox Code Playgroud)

  • 我不同意这段代码很糟糕.如果你的JavaScript依赖于ASP.NET(在我的例子中,它调用PageMethods.*并使用各种嵌入的.ClientID调用来引用ASP.NET控件)那么这很好.此外,其他例子如何更便携?你指的是一个变量isPostBack,它没有伴随的代码隐藏的ASP.NET代码,没有任何意义. (21认同)

小智 12

你好试试以下......

function pageLoad (sender, args) {

alert (args._isPartialLoad);

}
Run Code Online (Sandbox Code Playgroud)

结果是一个布尔值

  • 这是正确答案。不是其他人。它使用内置功能,在外部 .js 文件中工作,不需要任何代码隐藏实现。请参阅此帖子:http://stackoverflow.com/questions/602441/whats-the-different-between-asp-net-ajax-pageload-and-javascript-window-onloa 了解更多 (2认同)

md1*_*337 5

该解决方案对我不起作用,我不得不对其进行调整:

protected void Page_Load(object sender, EventArgs e)
{
    string script;
    if (IsPostBack)
    {
        script = "var isPostBack = true;";
    }
    else
    {
        script = "var isPostBack = false;";
    }
    Page.ClientScript.RegisterStartupScript(GetType(), "IsPostBack", script, true);
}
Run Code Online (Sandbox Code Playgroud)

希望这可以帮助。

  • 看,那是很久以前的事了,我不记得为什么它不起作用了。我应该发布原因,但是我的时间非常有限,所以我只发布了我的修复程序。希望这将使1或2个人受益,冒着冒着质疑您2岁的解决方案的愤怒的风险。 (3认同)
  • 为什么不起作用?与其提出一个不同的解决方案,不如您应该更深入地研究一下为什么它不起作用,以便至少可以将您的信息随您的改编发布在这里。 (2认同)