在代码隐藏中从Page_Load调用javascript函数

时间:2010-04-20 08:38:30

标签: c# asp.net javascript

如何从代码隐藏中的Page_Load方法调用aspx页面中的javascript函数?

8 个答案:

答案 0 :(得分:5)

简单的答案是,你做不到。 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!
}

要使用此功能,您需要在标记中使用<asp:ScriptManager>元素才能使用它(如果内存服务,如果没有,则会抛出异常)。 ScriptManager使用文本“CallMyMethod”来唯一标识它为您注入的脚本,以及文本“myMethod();”是嵌入式的,因此您最终会在页面中添加一个类似于以下内容的脚本元素:

<script language="javascript" type="text/javascript">
    myMethod();
</script>

答案 1 :(得分:3)

最简单的方法是使用页面的ClientScript属性。您可以注册一些代码,以便在使用

等页面加载页面时运行
ClientScript.RegisterStartupScript(GetType(), "hiya", "alert('hi!')", true);

有关详细信息,请参阅http://msdn.microsoft.com/en-us/library/asz8zsxy.aspx

这可以通过添加“Page”从子控件中获得。到上面代码的开头。

答案 2 :(得分:2)

你为什么要这样做? 目的是什么?

无论如何,你可以做到以下几点,但我不推荐!的

     protected void Page_Load(object sender, EventArgs e)
    {
         string pagename = "Test.aspx"; 
         String scriptString = "<script language=JavaScript> function DoClick() {"; 
         scriptString += " window.showModalDialog('" + pagename + "' )}"; 
         scriptString += "</script>";            

if(!this.IsStartupScriptRegistered("Startup")) //This is **not** a good practice
this.RegisterStartupScript("Startup", scriptString); 
    }

您能否提供更多有关您希望获得的信息以获得更好的答案..

答案 3 :(得分:1)

实德的解决方案有效。问题是,如果您只想在回发上运行您的代码,例如。我找到的解决方案是使用“cookie”:我验证cookie是否存在,如果不存在,我运行javascript代码并设置cookie。当您点击刷新时,将找到cookie,因此该段代码将无法运行。

function pageLoad() {
   if(localStorage.getItem("cookie") === null) {
      localStorage.setItem("cookie", true);

      //run code
   }
}

每次运行所需的任何代码都会将其从if语句中删除。

答案 4 :(得分:0)

您需要使用注册客户端脚本:

我是在页面加载方法中执行的:

if (!this.ClientScript.IsClientScriptBlockRegistered(this.GetType(), "HelpScript"))
{
  var scriptSource = "function ShowHelp() { alert(""); };\n";
  ScriptManager.RegisterClientScriptBlock(Page, this.GetType(), "HelpScript", scriptSource, true);
}

但我认为不推荐

我的意思是......你可以这样做,而且它会起作用。但对我来说,从asp.net页面插入脚本的唯一好处是获得服务器控件的一些客户端功能。

例如,获取控件实例:

var myControlId = this.control.ClientID;

但是当你需要更改它或调试它时,在服务器端编写整个javascript函数和逻辑是不舒服的(对我来说它是硬编码的字符串)。

答案 5 :(得分:0)

如果你只是想调用一个JavaScript函数(并且不需要从代码隐藏中传递一些东西,那么使用它......)

  • document.onload = function(){your-function(); };
  • window.onload = function(){your-function(); };
  • document.readyState = function(){your-function(); }

    ......取决于您的具体要求。

希望这对你有意义。回答你的问题。

答案 6 :(得分:0)

这是一个小技巧,我发现自己没有服务器端代码。 页面加载时将调用该函数(可与更新面板一起使用):

<script>
function pageLoad() {
        //Do your stuff
        }
</script>

它是未知的,但却像魅力一样

答案 7 :(得分:0)

请尝试以下代码:

  ScriptManager.RegisterClientScriptBlock(this.Page, this.GetType(), "MyFun1", "test();", true);