2012-04-03 79 views
0

我试图做一个登录页面使用html,ajax & ASP.NET.The数据是真正传递给ajax函数,但是当我调试asp页面的用户名和密码与NULL一起发送。 的代码应该采取用户名密码&然后返回用户标识登录页面使用ASP.Net和Ajax

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> 

的Javascript:

function UserLogin() { 
var postData = JSON.stringify({ "username": JSON.stringify($("#username").val()), "password": JSON.stringify($("#password").val()) }); 
alert(postData); 
$.ajax({ 
    type: "GET", 

    url: "http://localhost:49317/LoginPageForLearn.aspx", 
    data: postData, 
    contentType: "application/json; charset=utf-8", 
    dataType: "jsonp", 
    jsonp: 'jsoncallback', 
    success: callbackfunction, 
    error: function (msg) { alert(msg); } 
    }); 
    } 
    function callbackfunction(datacoming) { 
    localStorage["UserID"] = datacoming; 
    alert(datacoming); 

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访问数据。

非常感谢。

+3

您是通过QueryString以明文形式发送密码的吗?你是否考虑过安全? – 2012-04-03 17:37:34

+0

嗯,对不起,我还在学习,你有更好的主意吗? – OnlyHope 2012-04-03 17:39:57

+1

是的,使用HTTPS。另外建议使用POST动词以避免在Web服务器日志中获取密码。 – 2012-04-03 17:41:32

回答

1

您可以创建一个PageMethod的:

[WebMethod] 
public static bool MyMethod(string username, string password) 
{ 
    ... 
    return true; 
} 

,然后摆脱双JSON字符串化和调用页面方法:

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'); 
    } 
} 
+0

非常感谢,请问您能解释webmethod的用法吗? – OnlyHope 2012-04-03 17:34:51

+1

它被称为PageMethod。它是一个用'[WebMethod]'属性修饰的静态方法,您可以在ASP.NET页面中定义该属性,并且可以使用AJAX调用调用该属性并向其发送JSON请求。它基本上允许你公开一些服务器端功能到客户端脚本。 – 2012-04-03 17:36:06

+0

啊哈,好的... 感谢百万 现在就试试看看会发生什么:) – OnlyHope 2012-04-03 17:54:22

0

它不工作的方式。您还必须返回一些内容,以通知客户端身份验证成功或失败。你必须考虑程序化的工作流程。

您可以在您调用的页面中创建一个静态方法,以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" 
}); 

在你的成功或失败的回调,你会评估从那里,你想用回做什么值。

在任何情况下,处理程序可能会更好,因为它不包含不必要的标记。

+0

非常感谢丹尼斯..不好意思,如果你告诉我这个处理程序是如何工作的,会不会有可能? – OnlyHope 2012-04-03 17:55:43

+0

HttpHandlers只是终点,它响应Web请求。它包括一些IHttpHandler和IHttpModule接口。通用处理程序以.ashx扩展名结尾。 你可以在这里阅读更多 - http://msdn.microsoft.com/en-us/library/bb398986.aspx – 2012-04-03 18:12:42

+0

谢谢你很多。非常有用的信息:) – OnlyHope 2012-04-03 19:04:58