在代码隐藏中从Page_Load调用javascript函数
如何从代码隐藏中的Page_Load方法调用aspx页面中的javascript函数?
最简单的方法是使用页面的ClientScript属性。 您可以注册一些代码,以便在页面加载时运行
ClientScript.RegisterStartupScript(GetType(), "hiya", "alert('hi!')", true);
有关详细信息,请参阅http://msdn.microsoft.com/en-us/library/asz8zsxy.aspx 。
这可以通过添加“Page”从儿童控制中获得。 到上面的代码的开头。
简单的答案是,你做不到。 Page_Load方法中的代码在服务器上执行,javascript在客户端上执行。
如果您要做的是在Page_Load中添加对javascript方法的调用,以便在浏览器加载页面后执行javascript,则可以使用ScriptManager:
if (myConditionForAddingCallToJavascriptIsMet) { Page.ClientScript.RegisterClientScriptBlock(typeof(ScriptManager), "CallMyMethod", "myMethod();"); } else { // Do something else, add a different block of javascript, or do nothing! }
要使用它,你需要在你的标记中有一个
元素供它使用(如果有内存服务,如果没有,则抛出exception)。 ScriptManager使用文本“CallMyMethod”来唯一标识它为您注入的脚本,以及文本“myMethod();” 是嵌入式的,因此您最终会在页面中添加一个类似于以下内容的脚本元素:
你为什么想做这个? 目的是什么?
无论如何你可以做以下,但我不推荐它 ! :
protected void Page_Load(object sender, EventArgs e) { string pagename = "Test.aspx"; String scriptString = ""; if(!this.IsStartupScriptRegistered("Startup")) //This is **not** a good practice this.RegisterStartupScript("Startup", scriptString); }
您能否提供更多关于您想要达到的信息以获得更好的答案..
实德的解决方案有效。 问题是,如果您只想在回发上运行您的代码,例如。 我找到的解决方案是使用“cookie”:我validationcookie是否存在,如果不存在,我运行javascript代码并设置cookie。 当您点击刷新时,将找到cookie,因此该段代码将无法运行。
function pageLoad() { if(localStorage.getItem("cookie") === null) { localStorage.setItem("cookie", true); //run code } }
每次运行所需的任何代码都会将其从if语句中删除。
您需要使用注册客户端脚本:
-
MSDN
-
CodeProject上
我在页面加载方法中执行此操作:
if (!this.ClientScript.IsClientScriptBlockRegistered(this.GetType(), "HelpScript")) { var scriptSource = "function ShowHelp() { alert(""); };\n"; ScriptManager.RegisterClientScriptBlock(Page, this.GetType(), "HelpScript", scriptSource, true); }
但我不认为这是推荐的
我的意思是……你可以做到这一点,它会起作用。 但对我来说,从asp.net页面插入脚本的唯一好理由是获得服务器控件的一些客户端function。
例如,获取控件实例:
var myControlId = this.control.ClientID;
但是当你需要更改它或调试它时,在服务器端编写整个javascript函数和逻辑是不舒服的(对我来说它是硬编码的字符串)。
如果你只是想调用一个JavaScript函数(并且不需要从代码隐藏中传递一些东西,那么使用它…)
- document.onload = function(){your-function(); };
- window.onload = function(){your-function(); };
-
document.readyState = function(){your-function(); }
……取决于您的具体要求。
希望这对你有意义并回答你的问题。
这是一个小技巧,我发现自己没有服务器端代码。 页面加载时将调用该函数(可与更新面板一起使用):
它是未知的,但却像一个魅力
请尝试以下代码:
ScriptManager.RegisterClientScriptBlock(this.Page, this.GetType(), "MyFun1", "test();", true);