Ответ 1
PageMethod более простой и быстрый подход для Asp.Net AJAX Мы можем легко улучшить работу пользователей и производительность веб-приложений, развязав мощь AJAX. Одна из лучших вещей, которые мне нравятся в AJAX, - это PageMethod.
PageMethod - это способ, с помощью которого мы можем выставить метод боковой страницы сервера в java script. Это приносит так много возможностей, что мы можем выполнять множество операций, не используя медленные и раздражающие сообщения.
В этом сообщении я показываю основное использование ScriptManager и PageMethod. В этом примере я создаю форму регистрации пользователя, в которой пользователь может зарегистрировать свой адрес электронной почты и пароль. Вот разметка страницы, которую я собираюсь разработать:
<body>
<form id="form1" runat="server">
<div>
<fieldset style="width: 200px;">
<asp:Label ID="lblEmailAddress" runat="server" Text="Email Address"></asp:Label>
<asp:TextBox ID="txtEmail" runat="server"></asp:TextBox>
<asp:Label ID="lblPassword" runat="server" Text="Password"></asp:Label>
<asp:TextBox ID="txtPassword" runat="server"></asp:TextBox>
</fieldset>
<div>
</div>
<asp:Button ID="btnCreateAccount" runat="server" Text="Signup" />
</div>
</form>
</body>
</html>
Чтобы настроить метод страницы, сначала перетащите менеджер script на свою страницу.
<asp:ScriptManager ID="ScriptManager1" runat="server" EnablePageMethods="true">
</asp:ScriptManager>
Также обратите внимание, что я изменил EnablePageMethods="true"
.
Это скажет ScriptManager, что я буду называть PageMethods с клиентской стороны.
Теперь следующий шаг - создать функцию Server Side.
Вот функция, которую я создал, эта функция проверяет ввод пользователя:
[WebMethod]
public static string RegisterUser(string email, string password)
{
string result = "Congratulations!!! your account has been created.";
if (email.Length == 0)//Zero length check
{
result = "Email Address cannot be blank";
}
else if (!email.Contains(".") || !email.Contains("@")) //some other basic checks
{
result = "Not a valid email address";
}
else if (!email.Contains(".") || !email.Contains("@")) //some other basic checks
{
result = "Not a valid email address";
}
else if (password.Length == 0)
{
result = "Password cannot be blank";
}
else if (password.Length < 5)
{
result = "Password cannot be less than 5 chars";
}
return result;
}
Чтобы сообщить менеджеру script, что этот метод доступен через javascript, нам нужно обеспечить две вещи:
Первый: этот метод должен быть "public static". Второй: должен существовать тег [WebMethod] выше, как указано в приведенном выше коде.
Теперь я создал функцию на стороне сервера, которая создает учетную запись. Теперь мы должны называть его с клиентской стороны. Вот как мы можем вызвать эту функцию с клиентской стороны:
<script type="text/javascript">
function Signup() {
var email = document.getElementById('<%=txtEmail.ClientID %>').value;
var password = document.getElementById('<%=txtPassword.ClientID %>').value;
PageMethods.RegisterUser(email, password, onSucess, onError);
function onSucess(result) {
alert(result);
}
function onError(result) {
alert('Cannot process your request at the moment, please try later.');
}
}
</script>
Для вызова метода на стороне сервера Зарегистрируйте пользователя, ScriptManager создает прокси-функцию, доступную в PageMethods.
У моей функции на стороне сервера есть два параметра: электронная почта и пароль, после этих параметров мы должны дать еще два имени функции, которые будут выполняться, если метод успешно выполнен (первый параметр, т.е. onSucess) или метод не работает (второй параметр, т.е. результат).
Теперь все кажется готовым, и теперь я добавил OnClientClick="Signup();return false;"
в мою кнопку "Регистрация". Итак, вот полный код моей страницы aspx:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title></title>
</head>
<body>
<form id="form1" runat="server">
<div>
<asp:ScriptManager ID="ScriptManager1" runat="server" EnablePageMethods="true">
</asp:ScriptManager>
<fieldset style="width: 200px;">
<asp:Label ID="lblEmailAddress" runat="server" Text="Email Address"></asp:Label>
<asp:TextBox ID="txtEmail" runat="server"></asp:TextBox>
<asp:Label ID="lblPassword" runat="server" Text="Password"></asp:Label>
<asp:TextBox ID="txtPassword" runat="server"></asp:TextBox>
</fieldset>
<div>
</div>
<asp:Button ID="btnCreateAccount" runat="server" Text="Signup" OnClientClick="Signup();return false;" />
</div>
</form>
</body>
</html>
<script type="text/javascript">
function Signup() {
var email = document.getElementById('<%=txtEmail.ClientID %>').value;
var password = document.getElementById('<%=txtPassword.ClientID %>').value;
PageMethods.RegisterUser(email, password, onSucess, onError);
function onSucess(result) {
alert(result);
}
function onError(result) {
alert('Cannot process your request at the moment, please try later.');
}
}
</script>