メソッド内からjavascript関数を呼び出すにはどうすればよいですか?
-
03-07-2019 - |
質問
私は中にいます...
public class bgchange : IMapServerDropDownBoxAction
{
void IServerAction.ServerAction(ToolbarItemInfo info)
{
Some code...
および" 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;"を参照するためにオブジェクト参照が必要です」と言います。ありがとう。
解決
あなたがやろうとしていること、クライアント側とそうでないことの順序を完全に理解しているかどうかはわかりません。
ただし、Webメソッドを呼び出すページに起動JavaScriptメソッドを追加できます。 JavaScriptを使用してWebMethodを呼び出す場合、コールバック関数を追加できます。この関数は、WebMethodが戻るときに呼び出されます。
ページにScriptManagerタグを追加すると、ページで定義されたWebMethodsをJavascript経由で呼び出すことができます。
<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コントロールのこのリンクを見つけました。これはあなたが使っているものですか??
そのページからは、このようなものが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);
}
他のヒント
上記がRegisterStartupScriptの呼び出し方法である場合、「ページ」への参照がないため、動作しません。オブジェクト。
例のbgchangeはObjectを拡張します(IMapServerDropDownBoxActionがインターフェイスであると仮定)。これは、参照するPageインスタンスがないことを意味します。
これは、Asp.Netページまたは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);
}
}
ブラウザ内のメソッドをサーバーから直接呼び出すことはできません。ただし、ブラウザ内でメソッドを実行するJavaScript関数を応答に追加できます。
ServerActionメソッド内で、次を実行します
string script = "<script language='javascript'>\n";
script += "javascriptFunctionHere();\n";
script += "</script>";
Page.RegisterStartupScript("ForceClientToCallServerMethod", script);
えーと...質問は元の答えから劇的に変わりました。
今、答えはノーだと思います。しかし、私は間違っているかもしれません。