4

私は中にいる...

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 は、「コード「Page.Clientscript」を参照する非静的フィールド、メソッド、またはプロパティ「System.Web.UI.Page.ClientScript.get」にはオブジェクト参照が必要です」と言っています。

4

4 に答える 4

4

あなたがやろうとしていること、クライアント側のものとそうでないものの順序を完全に理解しているかどうかはわかりません....

ただし、WebMethod を呼び出すスタートアップ 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);
}
于 2008-09-30T16:32:23.837 に答える
3

上記のように RegisterStartupScript を呼び出している場合、「ページ」オブジェクトへの参照がないため、機能しません。

例の 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);          
    }
}
于 2008-09-30T17:05:37.687 に答える
2

ブラウザ内のメソッドをサーバーから直接呼び出すことはできません。ただし、ブラウザー内でメソッドを実行する JavaScript 関数を応答に追加することはできます。

ServerAction メソッド内で、次の操作を行います。

string script = "<script language='javascript'>\n";
script += "javascriptFunctionHere();\n";
script += "</script>";

Page.RegisterStartupScript("ForceClientToCallServerMethod", script);

詳細はこちら

于 2008-09-30T16:32:58.703 に答える
1

うーん...私の最初の答えから質問が劇的に変わりました。

今、答えはノーだと思います。しかし、私は間違っているかもしれません。

于 2008-09-30T16:27:00.307 に答える