0

块引用

我想最好的页面覆盖方法,我们可以在这个页面方法中使用什么样的数据。任何机构都可以帮助我解决这个问题。

4

1 回答 1

3

PageMethods 是代码后面装饰有[WebMethod][ScriptMethod]属性的静态方法(实际上,[ScriptMethod]如果您不使用由 ASP.NET 生成的 jjavascript 代理来调用 PageMethod,则不需要该属性 - 请参阅下面的答案以获取有关调用的更多信息页面方法)。它们可以将任意复杂的 .NET 对象作为输入和输出。他们使用 JSON 作为序列化机制。

让我们以 WebForm 的代码隐藏中定义的 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
});

为了生成此代理,必须使用该[ScriptMethod]属性修饰 PageMethod。

作为使用自动生成的 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,则不需要使用[ScriptMethod]属性装饰 PageMethod,因为我们不关心此代理,因为我们不使用它。

于 2012-09-24T08:29:41.803 回答