从C#ASP.NET运行JavaScript

从C#ASP.NET运行JavaScript,javascript,c#,asp.net,vb.net,Javascript,C#,Asp.net,Vb.net,我试图从C#中的代码中运行javascript函数。我在网上查阅了很多资源,但到目前为止还没有找到。这甚至不适用于我拥有的非常简单的示例代码: 代码隐藏: protected void Button2_Click(object sender, EventArgs e) { ScriptManager.RegisterStartupScript(this,GetType(),"a","a();", true); } 在我的aspx文件中: <script typ

我试图从C#中的代码中运行javascript函数。我在网上查阅了很多资源,但到目前为止还没有找到。这甚至不适用于我拥有的非常简单的示例代码:

代码隐藏:

  protected void Button2_Click(object sender, EventArgs e)
  {
       ScriptManager.RegisterStartupScript(this,GetType(),"a","a();", true);
  }
在我的aspx文件中:

 <script type="text/javascript">
         function a()
         {
             var i = 0;

         }
  </script>

函数a()
{
var i=0;
}
当我运行此命令时,我得到:

0x800a1391-JavaScript运行时错误:“a”未定义

注:

还尝试:

  • RegisterStartupScript(this,GetType(),“a”,“a()”,true)
  • RegisterStartupScript(this,GetType(),“a”,“a”,true)
仍然得到相同的错误


未来读者注意:诀窍是使用ASP更新面板。我没有找到任何一个源代码来指出这一非常重要的事实。

在按钮单击事件处理程序中,注册启动脚本为时已晚。你必须早点做。请参阅asp.net页生命周期

我在
Page\u Load
事件中做了与您相同的操作,即使使用
a()
标识符,它也能完美地工作。我已将工作示例上载到我的Onedrive公用文件夹。看见查看
default.aspx
default.cs
文件

default.aspx

    <script type="text/javascript">
        function a(msg) {
            alert(msg);
        }

    </script>
  • 在任何位置使用ScriptManager.RegisterStartupScript,只要它位于
    UpdatePanel
现在告诉您的
a()
是一个javascript函数:

ScriptManager.RegisterStartupScript(this,GetType(),"a","javascript:a();", true);

决不能将标识符仅与1个字符
“a”
或命名对象或类似方法一起使用。现在,调试的第一步:
ScriptManager.RegisterStartupScript(这个,GetType(),“myDebugAlert”,“alert('My script is OK');”,true)有效吗?您可以告诉我是的,然后我可以告诉您这是因为当您的脚本注册为StartupScript时,您的
a()
函数不存在。a仅用于测试。我厌倦了在这里简化我的代码。是的,我直接在ScriptManager.RegisterStartupScript后面的代码上运行它(这个,GetType(),“a”,“alert('test');”,true)
它可以工作。复制我的答案并治疗我好吗?我并没有不尊重(就像你们对我一样),我只是给了全世界公认的建议。@MacKentoch我根本不认为这是你们的答案。你的评论毫无帮助。@Michal Hainc是对的。我的方式(不是万能收据^^^)是使用
母版页
(用于导航和页脚(不需要经常刷新)),我的所有页面都是更新面板中此母版页的内容。这样,我的所有网站都可以使用ajax**现在,很高兴你现在没事了。谢谢@Michal Hainc。希望你很好的编码和乐趣!
ScriptManager.RegisterStartupScript(this,GetType(),"a","javascript:a();", true);