C# 在服务器端调用javascript函数

C# 在服务器端调用javascript函数,c#,asp.net,javascript,updatepanel,C#,Asp.net,Javascript,Updatepanel,在页面加载/任何事件中执行代码后,如何在服务器端调用javascript函数?我在此页面中使用UpdatePanel。我尝试了Page.RegisterStartUpScript,ClientScript.RegisterStartUpScript。所有这些都不起作用。需要使用UpdatePanel,如下所示: var script = "alert('hi);"; ScriptManager.RegisterStartupScript(this, GetType(), "MyScript",

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

需要使用UpdatePanel,如下所示:

var script = "alert('hi);";
ScriptManager.RegisterStartupScript(this, GetType(), "MyScript", script, true);
您必须记住,在UpdatePanel中,您没有将整个页面发送回客户端,因此
页面
版本将不起作用,因为它们的内容在部分更新时不会出现在任何地方。使用
ScriptManager
它会主动地将它作为脚本发送到AJAX响应中执行,因此它的行为有点不同。

为应用程序注册启动脚本块 控件,该控件位于UpdatePanel中 通过使用ScriptManager控件, 并将脚本块添加到页面中


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

Sys.WebForms.PageRequestManager.getInstance().add_pageLoading(PageLoadingHandler); 函数PageLoadingHandler(发送方,参数){ var dataItems=args.get_dataItems(); 如果($get(“”)!==null){ 评估(数据项['']); } }

然后,我在母版页的标记中的某个地方放置了一个hiddenfield,如下所示:

asp:HiddenField ID=“JSBridge”runat=“server”

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

public void InvokeScriptMethod(string methodName,string[]methodArgs) { string-sArgs=string.Empty; string delim=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 + ")");
        }
    }
因此,假设您的内容位于任何网页上的更新面板、任何按钮单击或任何事件中,您只需执行以下操作:

受保护的无效MyButton\u单击(对象发送者,事件参数e) { //--调用基本页方法来调用javascript调用 InvokeScriptMethod(“ShowMessage”,新字符串[]{“David”,“Whitten”,“44”}); }

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

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


David

我已经试过了。它可以工作。但我无法调用脚本函数。我需要调用脚本函数,即自定义函数或脚本block@Sreejesh-您可以调用
myFunction(“某物”)
,等等。任何您想要的,都可以将其视为
myFunction(“某物”)
在客户端…这不是您想要的吗?是的。我在服务器端的代码是string script=“DisplayM();”ScriptManager.RegisterStartupScript(这个,GetType(),“MyScript”,script,true);在脚本函数中,我编写了显示警报消息的脚本。但它不起作用。@Sreejesh-页面中是否有JavaScript错误?如果定义了
DisplayM
,这应该可以工作。检查控制台中的错误以查看出了什么错误,如果
alert()
效果很好。@Sreejesh-非常好,是周五的胜利:)