繁体   English   中英

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

[英]Calling a javascript function from Page_Load in code-behind

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

简单的答案是,你不能。 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>

最简单的方法是使用页面的 ClientScript 属性。 您可以使用类似的方法注册一些代码以在页面加载时运行

ClientScript.RegisterStartupScript(GetType(), "hiya", "alert('hi!')", true);

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

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

你为什么想做这个? 目的是什么?

无论如何,您可以执行以下操作,但我不推荐它!!!

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

您能否提供有关您想要实现的目标的更多信息以获得更好的答案..

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

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

      //run code
   }
}

您需要每次运行的任何代码都将其排除在 if 语句之外。

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

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

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

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

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

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

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

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

它是未知的,但就像一个魅力

请试试这个代码:

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

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

我在页面加载方法中执行此操作:

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 函数和逻辑并不舒服。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM