0

javascript:

            var Enabled = false;
            function GateWay_Enabled(GateWay_Name) {
                PageMethods.GateWay_Enabled(GateWay_Name, onRequestComplete, onError);
                return Enabled;
            }

            function onRequestComplete(result) {
                Enabled = result;
            }
            function onError(result) {
                alert('Error');

            }
            var MyVariable = GateWay_Enabled('GateWay_Name');

サーバーサイドコード(C#):

[WebMethod]
[ScriptMethod]
public static bool GateWay_Enabled(string GateWay_Name)
{
    bool Enabled = true;
    return Enabled;
}

MyVariableが常にfalseであるのはなぜですか?関数の戻り値として
記述する別の方法はありますか?私はこのようなものを探しています: PageMethods.GateWay_Enabled(GateWay_Name, onRequestComplete, onError);GateWay_Enabled

var MyBoolVariable =
bool.parse(PageMethods.GateWay_Enabled(GateWay_Name,
onRequestComplete, onError));

編集1:
すべてが機能しており、PageMethodsにエラーはありません。
スクリプトマネージャのEnablePageMethodsはtrueです。

編集2:
MyVariableをonRequestComplete()関数内に配置できません。
コードを簡単にするためにMyVariableを作成しました。
MyVariableの実際のコードは次のとおりです。

    GateWays = [
                        { "Cod": 1, "Enabled": GateWay_Enabled('1') },
                        { "Cod": 2, "Enabled": GateWay_Enabled('2') },
                        { "Cod": 3, "Enabled": GateWay_Enabled('3') },
                        { "Cod": 4, "Enabled": GateWay_Enabled('4') },
                        { "Cod": 5, "Enabled": GateWay_Enabled('5') },
                        { "Cod": 6, "Enabled": GateWay_Enabled('6') },
                        { "Cod": 7, "Enabled": GateWay_Enabled('7') }
                ];

この配列を別の場所で使用したいと思います。
onRequestComplete()関数に入れることができません。
私は何をしますか?

4

4 に答える 4

2

コードをリファクタリングする必要があります。GateWay_Enabled今、結果を伴うメソッドの後に何かをしています。それを別のメソッドに入れて、メソッドから呼び出し onRequestCompleteます。

var Enabled = false;
function GateWay_Enabled(GateWay_Name) {
    PageMethods.GateWay_Enabled(GateWay_Name, onRequestComplete, onError);
}

function onRequestComplete(result) {
    alert(result); // you will get results here; 
    Enabled = result;
    //do something with value 
}
function onError(result) {
    alert('Error');
}

GateWay_Enabled('GateWay_Name');  // you can't get direct output from this method,  
// have to get results from success callback method or onError callback method 
于 2012-05-29T11:00:34.330 に答える
1

PageMethods の呼び出しは非同期です。return Enabled関数onRequestCompleteが呼び出される前に行が実行されます。

代わりに使用MyVariableして、onRequestComplete関数に読み込むコードを入れてみてください。result

Edit2 とコメントの後、次のことをお勧めします。

  1. GateWays入力 ID の配列を指定して配列全体を返すように PageMethod をリファクタリングし、 7 つの AJAX 呼び出しを行わないようにします。
  2. ユーザーがリンクをクリックしたときにこのすべての AJAX が呼び出されるようにし、その後のコードをonRequestCompleteメソッドに入れます。

または、このデータがユーザーのクリック間で変化しない場合は、サーバー側で取得することをお勧めします。

7 回の呼び出しがすべて完了するまでユーザー クリック コードを確実に待機させる簡単な方法はありません。

于 2012-05-29T10:49:07.987 に答える
0

ScriptManager に EnablePageMethods="true" を追加しましたか?

于 2012-05-29T10:47:29.460 に答える
0

実行MyVariable前の値をチェックしていますonRequestComplete

于 2012-05-29T10:49:09.553 に答える