3

次のような解決策が見つからないように見える問題があります。

メニューのあるマスター ページがあり、メニュー内の各リンクは LinkBut​​ton です。

ユーザーが特定のリンクをクリックしてログインポップアップを表示するたびに、Ajax ModalPopupExtender を使用してポップアップを正常に表示する必要があります。

つまり、ユーザー名とパスワードを入力してログインを押す必要がありますが、ポップアップにいるのでポストバックのために閉じてしまうので、ポストバックを抑制し、クライアントからチェックを行う必要があります側で、javascript 関数からサーバー メソッドを呼び出す必要があります。Pag​​eMethods を使用しようとしましたが、PageMethdos が定義されていません。マスター ページまたはユーザー コントロール内では機能しないことを読みました。

私の問題の解決策はありますか?

4

3 に答える 3

4

PageMethods は、MasterPage メソッドではなく、aspx ページで使用されます。唯一の回避策は、別の .asmx WebService を作成し、静的関数にロジックを追加することです。これを行うには、VS でソリューションを右クリックし、[新しい項目の追加] をクリックして、WebService.asmx を選択します。WebService のコード ビハインドで、静的な webMethod を記述します。

[WebMethod]// press alt+shift+f10 after selecting the WebMethod wording to include the library
public static bool CheckLogin (string username, string password){
//Type your method here
return result;//Result should be Boolean
}

リンクのクライアント側スクリプト クリック イベントの masterPage.master で、Ajax リクエストを Web サービスに投稿します。

 $.ajax({
        type: "POST",
        url: "YourWebServiceName.asmx/CheckLogin",
        data: '{"Username":"' + $('#username').val() + '","password":"' +
                $('#password').val() + '"}',
        dataType: "json",
        contentType: "application/json; charset=utf-8",
        success: function(message) {
          alert(message);//will alert 'true'
           //DO what you want to do on client side
        },
        error: function() {
          alert(message);//will alert 'false'
 //DO what you want to do on client side
        }
    });

さらに説明が必要な場合はお知らせください。良い一日をお過ごしください:)

于 2013-11-05T10:29:46.243 に答える
3

1 つの解決策は、すべてのページの基本クラスを作成し、そこにページ メソッドを配置することです。例えば:

public class CustomBasePage : System.Web.UI.Page
{
    [System.Web.Services.WebMethod]
    public static bool ValidateUser(...)
    {
        bool isValid = false;

        ...

        return isValid;
    }
}

これで、すべてのコンテンツ ページが次CustomBasePageの代わりに配信されPageます。

//public partial class Index : System.Web.UI.Page
public partial class Index : CustomBasePage
{
    ...
}

この方法では、メソッドを 1 回だけ記述し、いつでもアクセスできるため、マスター ページでメソッドに依存できます。

于 2013-11-05T10:30:39.637 に答える
1

<base target="_self">ページの にタグを追加してみましたかhead。ポストバックが元のページで発生することを確認します。

于 2013-11-05T10:00:01.997 に答える