母版页中的PageMethods或Alternative?

时间:2013-11-05 09:09:05

标签: c# asp.net ajax modalpopupextender pagemethods

我遇到的问题似乎无法找到以下解决方案:

我有一个包含菜单的母版页,菜单中的每个链接都是一个LinkBut​​ton。

我要求每当用户点击某个链接以显示登录弹出窗口时,我就会使用Ajax ModalPopupExtender并成功显示弹出窗口。

现在我要验证用户,这意味着我需要输入用户名和密码并按登录,但因为我在弹出窗口它将关闭因为回发所以我抑制了回发,现在我必须做检查从客户端,所以我需要从一个javascript函数调用一个服务器方法,我尝试使用PageMethods但我一直没有定义PageMethdos,然后我读到它将无法在母版页或用户控件内工作。

我的问题的任何解决方案?

3 个答案:

答案 0 :(得分:4)

PageMethods将在aspx页面中使用,而不是在MasterPage方法中使用。唯一的解决方法是创建单独的.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
        }
    });

如果您需要进一步说明,请与我们联系    祝你有愉快的一天:)

答案 1 :(得分:2)

一种解决方案是为所有页面创建基类,并将页面方法放在那里。例如:

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
{
    ...
}

这样您只需编写一次该方法,并且始终可以访问该方法,因此您可以在母版页中依赖它。

答案 2 :(得分:1)

您是否尝试在页面的<base target="_self">中添加head标记?它将确保回发发生在原始页面中。