2015-11-04 58 views
1

在我的asp.net应用程序,我想调用一个函数Javascript,通过执行以下操作:Asp.net的RegisterStartupScript不点火

Page.ClientScript.RegisterStartupScript(this.GetType(), "goToDiv", "function goToDiv(){window.location.hash = '#ctl00_body_ApplicationFormContainer'};", true);   

但不点火。

JavaScript函数被调用回发事件后,但我认为它应该还是火,因为我下面的代码添加到我的Page_Load

if (IsPostBack) 
    { 
     Response.Write("POSTBACK:" + DateTime.Now.ToString("hh.mm.ss.ffffff"));    
    } 

,改变了startupscript到:

Page.ClientScript.RegisterStartupScript(this.GetType(), "goToDiv", "alert('POSTBACK: "+DateTime.Now.ToString("hh.mm.ss.ffffff")+"')", true);   

JavaScript警报时间是在回发时间之后,告诉我JavaScript警报是在回发后触发的?

然后我改变了代码回来,走到控制台源选项卡,启动脚本已经运行之前,并进入:

goToDiv() 

这给了以下错误:

Uncaught ReferenceError: goToDiv is not defined(…) 

例如该功能不存在。

然后我在启动脚本事件后再次输入它,并且它运行,所以我知道该函数已创建 - 那为什么它不运行?

我的代码似乎在语法上是正确的,所以我看不出是什么问题?

回答

3

您的代码: -

Page.ClientScript.RegisterStartupScript(this.GetType(), "goToDiv", 
    "function goToDiv(){window.location.hash = '#ctl00_body_ApplicationFormContainer'};", 
    true); 

是简单地增加一个Javascript功能,但不执行它。你需要触发这个功能吗?

只需添加一个按钮来测试: -

<input type="button" onclick="goToDiv()" value="Foo" /> 

当你点击这个按钮,它就会执行这个JavaScript函数。

如果你的意图是要执行一些块,那么你为什么要创建一个函数?你可以执行Javascript语句本身。

and the JavaScript alert time was after the postback time, telling me the JavaScript alert is fired after the postback?

是很明显,您注册在服务器端的Javascript代码,所以当该页面在浏览器(客户端)只有你的JS代码会被执行呈现。