0

引用符

オーバーライドされたメソッドのページを最適化したいのですが、このページメソッドでどのようなデータを取得できますか。これに関して私を助けることができる体はありますか?

4

1 に答える 1

3

PageMethods は、[WebMethod]および[ScriptMethod]属性で装飾されたコード ビハインドの静的メソッドです (実際に[ScriptMethod]は、ASP.NET によって生成された jjavascript プロキシを使用して PageMethod を呼び出していない場合、この属性は必要ありません。ページメソッド)。これらは、任意の複雑な .NET オブジェクトを入力および出力として受け取ることができます。シリアル化メカニズムとして JSON を使用します。

Web フォームの分離コードで定義された PageMethod の例を見てみましょう。

[WebMethod]
[ScriptMethod]
public static User[] FindUsers(User criteria)
{ 
    ... do some filtering on the criteria and return a User array with the results
}

User クラスは次のようになります。

public class User
{
    public int Id { get; set; }
    public string FirstName { get; set; }
    public string LastName { get; set; }
}

クライアント側では、組み込みの Microsoft AJAX フレームワークを使用してこの PageMethod を呼び出すことができます。このフレームワークは、型指定された JavaScript プロキシを自動的に生成して PageMethod を呼び出します。

var criteria = { FirstName: 'john', LastName: 'smith' };
PageMethods.FindUsers(criteria, function(users) {
    // success => you could directly use the "users" variable here
    // that will represent the result returned by your page method
    // for example
    for (var i = 0; i < users.length; i++) {
        alert(users[i].FirstName);
    }
}, function() {
    // failure
});

このプロキシを生成するには、PageMethod を[ScriptMethod]属性で装飾する必要があります。

自動生成された JavaScript プロキシを使用する代わりに、jQuery を使用して PageMethod を呼び出すこともできます。

var criteria = { FirstName: 'john', LastName: 'smith' };
$.ajax({
    type: 'POST',
    url: 'PageName.aspx/FindUsers',
    data: JSON.stringify(criteria: criteria),
    contentType: 'application/json; charset=utf-8',
    success: function(result) {
        // success => you need to use "result.d" to access the actual object 
        // that was returned by the PageMethod
        var users = result.d;
        for (var i = 0; i < users.length; i++) {
            alert(users[i].FirstName);
        }
    },
    error: function() {
        // failure
    }
});

プロキシを使用せずに JavaScript で PageMethod を直接呼び出す場合、PageMethod を[ScriptMethod]属性で装飾する必要はありません。このプロキシは使用していないため気にしないためです。

于 2012-09-24T08:29:41.803 に答える