如何从方法内部调用 javascript 函数?
Posted
技术标签:
【中文标题】如何从方法内部调用 javascript 函数?【英文标题】:How can I call a javascript function from inside a method? 【发布时间】:2008-09-30 16:11:40 【问题描述】:我在里面……
public class bgchange : IMapServerDropDownBoxAction
void IServerAction.ServerAction(ToolbarItemInfo info)
Some code...
在“一些代码”之后我想触发
[WebMethod]
public static void DoSome()
这会触发一些 javascript。这可能吗?
好的,在这里切换方法。我能够调用 dosome();触发但没有触发javascript。我曾尝试使用 registerstartupscript 方法,但不完全了解如何实现它。这是我尝试过的:
public class bgchange : IMapServerDropDownBoxAction
void IServerAction.ServerAction(ToolbarItemInfo info)
...my C# code to perform on dropdown selection...
//now I want to trigger some javascript...
// Define the name and type of the client scripts on the page.
String csname1 = "PopupScript";
Type cstype = this.GetType();
// Get a ClientScriptManager reference from the Page class.
ClientScriptManager cs = Page.ClientScript;
// Check to see if the startup script is already registered.
if (!cs.IsStartupScriptRegistered(cstype, csname1))
String cstext1 = "alert('Hello World');";
cs.RegisterStartupScript(cstype, csname1, cstext1, true);
我从一个 msdn 示例中获得了 registerstartupscript 代码。显然我没有正确实施它。目前 vs 说“非静态字段、方法或属性‘System.Web.UI.Page.ClientScript.get’需要对象引用,引用代码段“Page.Clientscript;”谢谢。
【问题讨论】:
你能多谈谈你想做什么吗?你建筑之类的?以及你想在更高层次上做同谋? DoSome()“触发一些 JavaScript”是什么意思? 【参考方案1】:我不确定我是否完全理解您尝试做的事情的顺序,什么是客户端,什么不是......
但是,您可以向页面添加一个启动 javascript 方法,然后该方法将调用 WebMethod。通过javascript调用WebMethod时,可以添加回调函数,当WebMethod返回时调用。
如果您在页面上添加 ScriptManager 标签,您可以通过 Javascript 调用页面中定义的 WebMethods。
<asp:ScriptManager ID="scriptManager1"
runat="server" EnablePageMethods="true" />
从 Page_Load 函数中,您可以添加对 WebMethod 的调用。
Page.ClientScript.RegisterStartupScript(
this.GetType(),
"callDoSome",
"PageMethods.DoSome(Callback_Function, null)",
true);
Callback_Function 表示调用 WebMethod 后会执行的 javascript 函数...
<script language="javascript" type="text/javascript">
function Callback_Function(result, context)
alert('WebMethod was called');
</script>
编辑:
找到Web ADF controls 的链接。这是你用的吗??
从那个页面,看起来像这样的东西会做一个 javascript 回调。
public void ServerAction(ToolbarItemInfo info)
string jsfunction = "alert('Hello');";
Map mapctrl = (Map)info.BuddyControls[0];
CallbackResult cr = new CallbackResult(null, null, "javascript", jsfunction);
mapctrl.CallbackResults.Add(cr);
【讨论】:
警报何时触发?我需要它在方法完成后发生。在您的示例中,警报会在页面加载时触发吗? 在调用 WebMethod 后会触发警报。在这个例子中,顺序是 PageLoad (server) -> PageMethods call (javascript) -> DoSome WebMethod (server) -> Callback_Function (javascript)。 你太棒了! Web ADF 控件正是我正在使用的,你的代码就像一个魅力。你超越了。因为像你这样的人,我喜欢堆栈溢出!【参考方案2】:如果上述方法是您调用 RegisterStartupScript 的方式,那么它将不起作用,因为您没有对“Page”对象的引用。
您示例中的 bgchange 扩展了 Object(假设 IMapServerDropDownBoxAction 是一个接口),这意味着没有可供您引用的 Page 实例。
您在 Asp.Net Page 或 UserControl 中执行的操作完全相同,它会起作用,因为 Page 将是一个有效的参考。
public partial class _Default : System.Web.UI.Page
protected void Page_Load(object sender, EventArgs e)
Page.ClientScript.RegisterStartupScript(
this.GetType(),
"helloworldpopup",
"alert('hello world');",
true);
【讨论】:
【参考方案3】:您不能直接从服务器调用浏览器中的方法。但是,您可以将 javascript 函数添加到将在浏览器中执行方法的响应中。
在 ServerAction 方法中,执行以下操作
string script = "<script language='javascript'>\n";
script += "javascriptFunctionHere();\n";
script += "</script>";
Page.RegisterStartupScript("ForceClientToCallServerMethod", script);
More info here
【讨论】:
是的,当我将其放入其中时,会在整个 Page.RegisterStartupScript 行下划线并说“非静态字段、方法或属性 'System.Web.UI.Page 需要对象引用。 RegisterStartupScript'...【参考方案4】:嗯...自从我最初的回答以来,这个问题发生了巨大的变化。
现在我认为答案是否定的。但我可能错了。
【讨论】:
以上是关于如何从方法内部调用 javascript 函数?的主要内容,如果未能解决你的问题,请参考以下文章
如何从 Derived 内部调用 Base 实例中的受保护成员函数?