Javascript 使用ASP.Net和;AJAX

Javascript 使用ASP.Net和;AJAX,javascript,asp.net,html,ajax,login,Javascript,Asp.net,Html,Ajax,Login,我正在尝试使用html、ajax和ASP.NET创建一个登录页面。数据确实传递给ajax函数,但当我调试ASP页面时,用户名和密码将以NULL发送。 该代码应该采用username和password,然后返回userid Html页面: <div id="usernameid">Username:</div><input id="username" type="text"/> <span id="username_status"></

我正在尝试使用html、ajax和ASP.NET创建一个登录页面。数据确实传递给ajax函数,但当我调试ASP页面时,用户名和密码将以NULL发送。 该代码应该采用username和password,然后返回userid

Html页面:

    <div id="usernameid">Username:</div><input id="username" type="text"/> <span id="username_status"></span>
    <div id="passwordid">Password:</div><input id="password" type="password"/> <span id="password_status"></span>
    <div> <input id="loginbutton" onclick="UserLogin()" type="submit" value="Submit" /></div>
Asp.net网页:

protected void Page_Load(object sender, EventArgs e)
    {

        string userName = "";
        int userId = -1;
        string PassWord = "";
        if (Request.QueryString.Count != 0 && Request.QueryString["username"] != string.Empty && Request.QueryString["password"] != string.Empty)
            {
                userName = Request.QueryString["username"];
                PassWord = Request.QueryString["password"];
                userId = GetUserID(userName, PassWord);

            }
    }
你知道为什么数据传递不正确吗?或者,对于如何使用html创建登录页面并访问SQL中的数据,您还有其他想法吗


非常感谢

您可以创建一个页面方法:

[WebMethod]
public static bool MyMethod(string username, string password)
{
    ...
    return true;
}
然后去掉双重JSON字符串化并调用page方法:

var postData = JSON.stringify({ 
    "username": $("#username").val(), 
    "password": $("#password").val() 
});
$.ajax({
    type: "POST",
    url: "LoginPageForLearn.aspx/MyMethod",
    data: postData,
    contentType: "application/json; charset=utf-8",
    success: callbackfunction,
    error: function (msg) { alert(msg); }
}); 
function callbackfunction(result) {
    if (result.d) {
        alert('success');
    }
}
在回调中,您可以测试page方法的结果:

var postData = JSON.stringify({ 
    "username": $("#username").val(), 
    "password": $("#password").val() 
});
$.ajax({
    type: "POST",
    url: "LoginPageForLearn.aspx/MyMethod",
    data: postData,
    contentType: "application/json; charset=utf-8",
    success: callbackfunction,
    error: function (msg) { alert(msg); }
}); 
function callbackfunction(result) {
    if (result.d) {
        alert('success');
    }
}

这样不行。您还必须返回一些信息,以便通知客户端身份验证成功或失败。您必须考虑编程工作流程

您可以在正在调用的页面中创建一个静态方法,该方法以Bool或JSON的形式返回值。大致如下:

[WebMethod] 
[ScriptMethod(UseHttpGet = true)]
public static bool Authenticate JsonMethod(int username, string password)
{ 
   bool isAuthenticated = // some method to authenticate
   return isAuthenticated;
}
您的AJAX将如下所示:

$.ajax({
    type: "GET",
    url: "http://localhost:49317/LoginPageForLearn.aspx/Authenticate",
    data: postData,
    contentType: "application/json; charset=utf-8",
    dataType: "jsonp"
}); 
在您的成功或失败回调中,您将从那里评估您希望如何处理返回的值


无论如何,处理程序可能会更好,因为它不包含不必要的标记。

非常感谢,对不起,请您解释一下webmethod的用法好吗?它被称为PageMethod。它是一个静态方法,由ASP.NET页面中定义的
[WebMethod]
属性修饰,可以使用AJAX调用调用并向其发送JSON请求。它基本上允许您向客户端脚本公开一些服务器端功能。。。感谢一百万现在就试试看会发生什么:)好的,我知道这是一个愚蠢的问题,但是我应该在MyMethod中写什么?这将取决于你希望这个方法做什么。你正在通过QueryString发送一个明文密码?你在考虑安全问题吗?嗯,对不起,我还在学习。你有更好的主意吗?是的,使用HTTPS。此外,建议使用POST谓词以避免在web服务器日志中获取密码。让回发发生并使用事件处理程序进行身份验证。你使用的方法只是让它变得更复杂,更不安全。谢谢Darin&James!我很抱歉,因为我问了很多。非常感谢丹尼斯。。对不起,如果您告诉我处理程序是如何工作的,是否可能?HttpHandler只是端点,它响应web请求。它包括IHttpHandler和IHttpModule接口。泛型处理程序以.ashx扩展名结尾。你可以在这里读更多--