Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/269.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 母版页中的页面方法或替代方法?_C#_Asp.net_Ajax_Modalpopupextender_Pagemethods - Fatal编程技术网

C# 母版页中的页面方法或替代方法?

C# 母版页中的页面方法或替代方法?,c#,asp.net,ajax,modalpopupextender,pagemethods,C#,Asp.net,Ajax,Modalpopupextender,Pagemethods,我有一个问题,似乎我无法找到解决方案,如下所示: 我有一个母版页,它有一个菜单,菜单中的每个链接都是一个链接按钮 我被要求每当用户单击某个链接以显示登录弹出窗口时,我都会使用Ajax ModalPopupXtender并成功显示弹出窗口 现在我想验证用户,这意味着我需要输入用户名和密码,然后按login,但由于我在弹出窗口中,它将因回发而关闭,因此我抑制了回发,现在我必须从客户端进行检查,因此我需要从javascript函数调用服务器方法,我试着使用PageMethods,但我一直得到PageM

我有一个问题,似乎我无法找到解决方案,如下所示:

我有一个母版页,它有一个菜单,菜单中的每个链接都是一个链接按钮

我被要求每当用户单击某个链接以显示登录弹出窗口时,我都会使用Ajax ModalPopupXtender并成功显示弹出窗口

现在我想验证用户,这意味着我需要输入用户名和密码,然后按login,但由于我在弹出窗口中,它将因回发而关闭,因此我抑制了回发,现在我必须从客户端进行检查,因此我需要从javascript函数调用服务器方法,我试着使用PageMethods,但我一直得到PageMethdos没有定义,然后我读到它在母版页或用户控件中不起作用


我的问题有什么解决办法吗?

您是否尝试在页面的
标题中添加
标记。它将确保回发发生在原始页面中。

页面方法将用于aspx页面,而不是母版页方法。唯一的解决方法是创建一个单独的.asmxwebservice,并将您的逻辑添加到一个静态函数中。为此,右键单击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上单击链接的事件,向Web服务发布Ajax请求

 $.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
        }
    });
如果您需要进一步的澄清,请告诉我
祝您有愉快的一天:)

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

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
{
    ...
}
这样,您只需编写一次方法,并且始终可以访问它,因此您可以在母版页中依赖它