C# 在服务器端调用javascript函数
在页面加载/任何事件中执行代码后,如何在服务器端调用javascript函数?我在此页面中使用UpdatePanel。我尝试了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",
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-非常好,是周五的胜利:)