【问题标题】:c# Multiple calls to a javascript function not workingc#对javascript函数的多次调用不起作用
【发布时间】:2011-11-09 19:42:44
【问题描述】:

在点击事件中,我调用同一个 JavaScript 函数 3 次,但 javascript 函数本身只执行一次。

BLL.Common.executeJSFunction("DoSomething();");
BLL.Common.executeJSFunction("DoSomething();");
BLL.Common.executeJSFunction("DoSomething();");

方法:

public static void executeJSFunction(string jsFunction)
    {
        var page = HttpContext.Current.Handler as Page;
        ScriptManager.RegisterStartupScript(page, page.GetType(), "Exec", jsFunction, true);
    }

Java 脚本函数:

function DoSomething()
{
   alert('Hello Word');
}

ps:页面上有一个ScriptManager和一个更新面板,以防万一......

【问题讨论】:

    标签: c# javascript asp.net .net


    【解决方案1】:

    你用每个函数调用覆盖键,试试:

    BLL.Common.executeJSFunction("DoSomething();", "Exec1");
    BLL.Common.executeJSFunction("DoSomething();", "Exec2");
    BLL.Common.executeJSFunction("DoSomething();", "Exec3");
    
    public static void executeJSFunction(string jsFunction, string key)
    {
        var page = HttpContext.Current.Handler as Page;
        ScriptManager.RegisterStartupScript(page, page.GetType(), key, jsFunction, true);
    }
    

    【讨论】:

      【解决方案2】:

      我相信这是因为您为脚本分配了相同的密钥 ("Exec")。为每个分配一个不同的键,或者只是这样做:

      BLL.Common.executeJSFunction("DoSomething();DoSomething();DoSomething();");
      

      【讨论】:

        【解决方案3】:

        现在,您在密钥 Exec 下注册了 3 次相同的代码。您需要为脚本注册使用不同的密钥:

        public static void executeJSFunction(string key, string jsFunction)
            {
                var page = HttpContext.Current.Handler as Page;
                ScriptManager.RegisterStartupScript(page, page.GetType(), key, jsFunction, true);
            }
        
        BLL.Common.executeJSFunction("Exec1", "DoSomething();");
        BLL.Common.executeJSFunction("Exec2", "DoSomething();");
        BLL.Common.executeJSFunction("Exec3", "DoSomething();");
        

        在此处查看更多信息: http://msdn.microsoft.com/en-us/library/bb310408.aspx

        【讨论】:

          【解决方案4】:

          在每个 executeJSFunction 方法调用上使用不同的 RegisterStartupScript 方法的关键参数值。你可以使用这个:ScriptManager.RegisterStartupScript(page, page.GetType(), Guid.NewGuid().ToString(), jsFunction, true);

          【讨论】:

          • thx yuri,因为我首先尝试了@JamesJohnson 解决方案,所以我会将他标记为已解决!但是非常感谢!
          【解决方案5】:

          我相信您的问题是因为每次调用 RegisterStartupScript 函数时都传递了相同的“键”参数(“Exec”)。

          查看这里了解更多信息 - http://forums.asp.net/t/1365260.aspx/1

          【讨论】:

            【解决方案6】:

            如果我们需要从c#中多次调用一个javascript函数,我们必须改变关键参数(第三个参数),因为浏览器会将它视为同一个请求,它不会处理那个请求。考虑以下位置

               var key="firstRequest";
                var page = HttpContext.Current.Handler as Page;
                    ScriptManager.RegisterStartupScript(page, page.GetType(), key, "FunctionName()",true);
            

            现在我们必须更改键以再次调用相同的函数,

               key="secondRequest";
               var page = HttpContext.Current.Handler as Page;
                    ScriptManager.RegisterStartupScript(page, page.GetType(), key, "FunctionName()",true);
            

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多