【问题标题】:Call javascript function in server side在服务器端调用javascript函数
【发布时间】:2011-03-13 19:49:41
【问题描述】:

在页面加载/任何事件中执行代码后,如何在服务器端调用 javascript 函数?我在此页面中使用 UpdatePanel。我试过Page.RegisterStartUpScript, ClientScript.RegisterStartupScript。这些都不起作用。

【问题讨论】:

    标签: c# asp.net javascript updatepanel


    【解决方案1】:

    对于 UpdatePanel,您需要使用 ScriptManager.RegisterStartupScript,如下所示:

    var script = "alert('hi);";
    ScriptManager.RegisterStartupScript(this, GetType(), "MyScript", script, true);
    

    您必须记住,在 UpdatePanel 中,您不会将整个页面发送回客户端,因此 Page 版本将不起作用,因为它们的内容在部分更新时永远不会出现在任何地方。使用ScriptManager,它主动将其推送到作为脚本发送的 AJAX 响应中以执行,因此它的行为略有不同。

    【讨论】:

    • 我试过这个。有用。但我无法调用脚本函数。我需要调用脚本函数,即自定义构建函数或脚本块
    • @Sreejesh - 你可以打电话给myFunction("something"),等等......任何你想要的,把它想象成客户端的<script type="text/javascript">myFunction("something");</script>......这不是你想要的?
    • 是的。我将服务器端的代码作为 string script = "DisplayM();"; ScriptManager.RegisterStartupScript(this, GetType(), "MyScript", script, true);在脚本函数中,我编写了显示警报消息的脚本。但它不起作用。
    • @Sreejesh - 页面中是否出现 JavaScript 错误?如果定义了DisplayM,这应该可以工作。检查您的控制台是否有错误,看看有什么错误,如果alert() 工作正常,这就是需要在此处修复的区域。
    • @Sreejesh - 太棒了,为周五的胜利加油 :)
    【解决方案2】:

    ScriptManager.RegisterStartupScript

    注册一个启动脚本块 UpdatePanel 中的控件 通过使用 ScriptManager 控件, 并将脚本块添加到页面。

    【讨论】:

      【解决方案3】:

      就在昨天,我做了一些研究来帮助一位同事,并提出了以下解决方案。它依赖于 ajax 控件扩展器中使用的一些技术来注册数据项。由于我希望这是一种更通用的方法,因此我将以下代码放置在母版页中的脚本块中,就在 scriptmanager 对象之后:

      Sys.WebForms.PageRequestManager.getInstance().add_pageLoading(PageLoadingHandler); 功能PageLoadingHandler(发件人,参数){ var dataItems = args.get_dataItems(); if ($get('') !== null) { eval(dataItems['']); } }

      然后我在母版页的标记中放置了一个隐藏字段,如下所示:

      asp:HiddenField ID="JSBridge" runat="server"

      这就是母版页。现在,我所有的网页都继承自一个基本页面,所以我在基本页面中放置了一个方法,如下所示:

      public void InvokeScriptMethod(string methodName, string[] methodArgs) { 字符串 sArgs = string.Empty; 字符串分隔符 = string.Empty; bool isNumeric = false; int iArg = 0;

              if (methodArgs != null && methodArgs.Length > 0)
              {
                  foreach (string arg in methodArgs)
                  {
                      isNumeric = int.TryParse(arg, out iArg);
                      sArgs += delim + ((isNumeric) ? arg : "'" + arg + "'");
                      delim = ",";
                  }
              }
      
              ScriptManager manager = (ScriptManager)Master.FindControl("ScriptManager1");
      
              if (manager.IsInAsyncPostBack)
              {
                  manager.RegisterDataItem(Master.FindControl("JSBridge"), methodName + "(" + sArgs + ")");
              }
          }
      

      因此,假设您的内容在更新面板内,任何按钮点击或任何与此相关的事件,在任何网页上,您都可以简单地执行以下操作:

      protected void MyButton_Click(object sender, EventArgs e) { //-- 调用基页方法调用javascript调用 InvokeScriptMethod("ShowMessage", new string[] { "David", "Whitten", "44" }); }

      这是假设您在某处有一个名为“ShowMessage”的 javascript 方法,其中包含必要的参数。显然,可以指定任何方法名称和任意数量的参数。

      只是想分享我的发现。也许还有更好的方法,但我觉得这非常简单和灵活。

      大卫

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-10-19
        • 2011-12-09
        • 1970-01-01
        • 2016-01-15
        • 2011-05-17
        • 1970-01-01
        • 2010-11-03
        • 1970-01-01
        相关资源
        最近更新 更多