块引用
我想最好的页面覆盖方法,我们可以在这个页面方法中使用什么样的数据。任何机构都可以帮助我解决这个问题。
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,因为我们不关心此代理,因为我们不使用它。