PageMethodは、Aspのためのより簡単で迅速なアプローチです。Net AJAX AJAXの力を引き出して、Webアプリケーションのユーザーエクスペリエンスとパフォーマンスを簡単に改善できます。 AJAXで私が気に入っている最も良いものの一つがPageMethodです。
PageMethodは、サーバーサイドページのメソッドをJavaスクリプトで公開する方法です。これは、ゆっくりと迷惑なポストバックを使わずに、たくさんの機会をたくさんもたらすことができます。
この記事では、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>
ページを設定するには、まずページ上のスクリプトマネージャーをドラッグする必要があります。
<asp:ScriptManager ID="ScriptManager1" runat="server" EnablePageMethods="true">
</asp:ScriptManager>
また、EnablePageMethods="true"
に変更があります。
これはScriptManagerに対して、クライアント側からPageMethodsを呼び出すことを通知します。
次に、サーバー側の機能を作成します。ここで
は、私が作成した関数で、この関数は、ユーザーの入力を検証します。
[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;
}
この方法は、我々は二つのことを確認する必要がありますジャバスクリプトを通じてアクセス可能であることをスクリプトマネージャを伝えるために:
最初に:このメソッドは、「パブリック静的でなければなりません'
2番目:上記のコードで記述されているように、メソッドの上に[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で提供されたプロキシ機能を生成します。
私のサーバ側の機能には2つのパラメータ、すなわち電子メールとパスワードがあります。そのパラメータの後に、メソッドが正常に実行された場合に実行される2つ以上の関数名を渡す必要があります。
今、すべての準備が整っているようですが、今すぐサインアップボタンに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>
最も簡単な方法は、おそらく、jQueryまたは関連するフレームワークを使用してAJAXリクエストをサーバーに送り返すことです。http://api.jquery.com/jQuery.ajax/キャンセルブロックでリクエストを作成し、サーバ。あなたはもっと多くの情報が必要な場合は尋ねてください。 – timothyclifford