“实现页面方法asp.net的最佳方法”

时间:2012-09-24 08:25:56

标签: asp.net

  

块引用

我想要最好的页面覆盖方法,我们可以在此页面方法中使用哪种数据。任何人都可以帮我解决这个问题。

1 个答案:

答案 0 :(得分:3)

PageMethods是使用[WebMethod][ScriptMethod]属性修饰的代码中的静态方法(如果您不使用ASP生成的jjavascript代理,实际上不需要[ScriptMethod]属性.NET调用PageMethod - 有关调用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,因为我们不关心此代理,因为我们没有使用它。 / p>