块引用
我想要最好的页面覆盖方法,我们可以在此页面方法中使用哪种数据。任何人都可以帮我解决这个问题。
答案 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>