如何在 JavaScript 中检查 IsPostBack?

IT技术 asp.net javascript
2021-03-04 23:20:19

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

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

谢谢你。

6个回答

服务器端,写:

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);
}

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

if(isPostBack) {
   // do your thing
}

否则你真的不需要设置变量,就像乔纳森的解决方案一样。客户端 if 语句将正常工作,因为“isPostBack”变量将是未定义的,它在该 if 语句中的计算结果为 false。

不,我不知道。根据 MSDN,您可能需要阅读有关我使用的重载的信息。:)
2021-04-26 23:20:19
这将使下一个寻找答案的人一目了然,而无需通读评论。谢谢
2021-04-28 23:20:19
大声笑 - 重述?当你回答的时候,我也是。我不知道你已经回答了(我们只相隔一两分钟)。这并不是一个独特的解决方案,它几乎是实现它方式。顺便说一句,我对你的评论是我回答后的编辑 - 你可以看到历史
2021-05-11 23:20:19
杰森,在你的回答中加上“过载”的解释
2021-05-13 23:20:19
顺便说一下,要从代码隐藏中访问 ClientScript 属性,请使用 Page.ClientScript。
2021-05-17 23:20:19

有一种更简单的方法,不需要在后面的代码中编写任何内容:只需将此行添加到您的 javascript 中:

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

或者

if(<%=(Page.IsPostBack).ToString().ToLower()%>){//Your JavaScript goodies here}
不会在外部 .js 文件中工作,而且它也很脏:从你的 Javascript 依赖 ASP 是不好的。使其不便携。
2021-05-03 23:20:19
我不同意这段代码很烂。如果您的 JavaScript 无论如何都依赖于 ASP.NET(在我的情况下,它调用 PageMethods.* 并使用各种嵌入的 .ClientID 调用来引用 ASP.NET 控件),那很好。此外,其他示例如何更便携?您指的是一个变量 isPostBack,如果代码隐藏中没有随附的 ASP.NET 代码,它将毫无意义。
2021-05-18 23:20:19

嗨,请尝试以下...

function pageLoad (sender, args) {

alert (args._isPartialLoad);

}

结果是一个布尔值

这是正确答案。不是其他人。它使用内置功能,在外部 .js 文件中工作,不需要任何代码隐藏实现。请参阅这篇文章:stackoverflow.com/questions/602441/...了解更多
2021-05-08 23:20:19
谢谢你,先生!:) 那应该是正确的答案。适用于纯 ASP 和 Telerik(RadScriptManager 而不是 ScriptManager)
2021-05-20 23:20:19

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

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);
}

希望这可以帮助。

它不起作用,因为如果您对不存在的变量执行“if”,它会退出您的脚本(无论如何在 Firefox 7 中)。但是,如果 postback 为 false,则不需要声明变量,您可以在 JavaScript 中执行此操作: if (typeof(isPostBack) != "undefined" && isPostBack)
2021-04-22 23:20:19
为什么它不起作用?与其想出一个不同的解决方案,也许您应该更深入地挖掘一下为什么它不起作用,这样您至少可以将这些信息与您的改编一起发布在这里。
2021-04-28 23:20:19
看,那是很久以前的事了,我不记得为什么它不起作用。我应该发布原因,但我的时间非常有限,所以我只是发布了我的修复程序。希望这将使 1 或 2 人受益,冒着因胆敢质疑 2 岁的解决方案而招致愤怒的风险。
2021-05-16 23:20:19

您可以在页面上放置一个隐藏的输入,并在页面加载后为其赋值。然后您可以检查该字段,如果它在发布数据中,则是回发,否则不是。

有两种使用服务器端代码(ASP.NET 特定)作为响应发布的解决方案。我认为值得指出的是,该解决方案与技术无关,因为它仅使用客户端功能,这些功能在所有主要浏览器中都可用。

您的解决方案确实是不可知的,但是基于标记方式的问题是特定于 ASP.NET 的。另外,由于我的回答被接受作为答案,Roman 显然在使用 ASP.NET
2021-04-28 23:20:19
请参阅我对为什么编辑此问题的评论以提供更清晰的信息。我对原始问题发表了评论。
2021-05-11 23:20:19