0

ビジュアルWebGuiアプリケーションのスキンファイルにjavaスクリプト関数を記述しましたが、これも値を返します。今、私はコードビハインドからjavascriptメソッドを呼び出しています。

public void XYZ( string message)
    {
        this.InvokeMethodWithId("testCall", message);
    }

そしてjavascript関数は:-

function testCall(strGuid, txt) {

    alert("hai Java script fired..");
    return txt+ 'returned from JavaScript';
}

アプリケーションでJavaScriptから返される値が必要です。どうすればそれを達成できますか。JavaScriptのメソッドを呼び出す他のメソッドはありますか?

私はこのようなものが欲しい:-

public void Conect( string message)
        {
          string returnedvalue =  this.InvokeMethodWithId("testCall", message);
        }
4

2 に答える 2

0

Javascript はクライアントで実行されるため、戻り値はサーバーに届きません。

解決策は、AJAX を使用してその値をサーバーに送信することです。Stack Overflow には、AJAX に関する回答が満載です。

これが良いです。

于 2012-09-26T17:51:04.173 に答える
0

@アーミッシュ・クマール、

他の返信ですでに指摘されているように、クライアント側とサーバー側は Web プログラミングで直接接続されていません。クライアントは常にすべての要求の開始者であり、サーバー側の「目的」は応答をレンダリングすることです。応答はクライアントに返されて処理されます。Visual WebGui では、これは通常、何らかの UI 更新処理です。これは基本的に、サーバー側が応答のレンダリングを完了するまでクライアント スクリプトが実行されないことを意味し、クライアントがサーバーにメッセージを返す唯一の方法は、別の要求を発行することです。

たとえば、Visual WebGui で MessageBox をどのように使用する必要があるかを考えてみてください。MessageBox から「応答」を受け取るには、サーバー側のコードでコールバック ハンドラを指定する必要があります。これにより、サーバー側のコードで応答の作成が完了し、クライアントに返されます。クライアントはその UI を更新し、MessageBox ダイアログに対する何らかのアクションで、新しい要求をサーバーに送信します。サーバーはアクションを解釈し、コールバック ハンドラーを呼び出します。コールバック ハンドラーでは、Form.DialogResult を使用してユーザー アクションを取得します。

カスタム Visual WebGui コードでこれを機能させる非常に基本的な方法は、フォーム上の次のコードのようになります。

    private void button1_Click(object sender, EventArgs e)
    {
        SendClientMessage("This is a test");
    }

    public void SendClientMessage(string strMessage)
    {
        System.Text.StringBuilder sb = new StringBuilder();
        sb.AppendLine("var objEvent = mobjApp.Events_CreateEvent('{0}', 'MessageEvent');");
        sb.AppendLine("mobjApp.Events_SetEventAttribute(objEvent, 'Msg', '{1}');");
        sb.AppendLine("mobjApp.Events_RaiseEvents();");

        this.InvokeScript(string.Format(sb.ToString(), this.ID, strMessage));
    }

    protected override void FireEvent(Gizmox.WebGUI.Common.Interfaces.IEvent objEvent)
    {
        if (objEvent.Type == "MessageEvent")
            MessageBox.Show(objEvent["Msg"]);
        else
            base.FireEvent(objEvent);

    }

このコードは、Visual WebGui アプリケーションを非表示に設定しない限り機能しません。このコードが隠蔽されたアプリケーションで機能するためには、JavaScript を隠蔽された JavaScript リソースとして追加する必要があり、問題なく動作します。

パリ

enter code here
于 2012-09-27T20:09:30.157 に答える