2012-04-03 7 views
0

Ich versuche, eine Login-Seite mit HTML, Ajax & ASP.NET zu machen.Die Daten werden wirklich an die Ajax-Funktion übergeben, aber wenn ich die ASP-Seite debuggen den Benutzernamen und das Passwort werden mit NULL gesendet. Der Code soll Benutzernamen nehmen & Passwort gibt dann die Benutzer-IDLogin-Seite mit ASP.Net & Ajax

HTML-Seite:

<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 Seite:

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); 

      } 
    } 

Do Sie haben irgendwelche Ideen, warum nicht die Daten korrekt übergeben werden? Oder haben Sie andere Ideen, wie ich eine Login-Seite mit HTML erstellen und auf die Daten bei SQL zugreifen kann.

Vielen Dank.

+3

Sie senden ein Kennwort im Klartext über den QueryString? Denken Sie über Sicherheit nach? –

+0

hmm, tut mir leid, ich lerne immer noch. Hast du eine bessere Idee? – OnlyHope

+1

Ja, verwenden Sie HTTPS. Es wird auch empfohlen, das POST-Verb zu verwenden, um zu vermeiden, dass das Kennwort in den Webserverprotokollen abgerufen wird. –

Antwort

1

Sie eine Pagemethod schaffen könnte:

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

und dann der Doppel JSON stringification loszuwerden und die Seite-Methode aufrufen:

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); } 
}); 

und in Ihrem Rückruf könnten Sie das Ergebnis der Prüfung Seitenmethode:

function callbackfunction(result) { 
    if (result.d) { 
     alert('success'); 
    } 
} 
+0

Vielen Dank, bitte entschuldigen Sie bitte die Verwendung der Webmethode? – OnlyHope

+1

Es heißt PageMethod. Es handelt sich um eine statische Methode, die mit dem Attribut "[WebMethod]" versehen ist, das Sie in Ihrer ASP.NET-Seite definieren und die mit einem AJAX-Aufruf aufgerufen und an diese eine JSON-Anforderung gesendet werden kann. Es ermöglicht Ihnen im Wesentlichen einige Server-Seitenfunktion für Client-Skripts verfügbar zu machen. –

+0

Aha, Ok ... Danke eine Million Werde es jetzt versuchen und sehen, was passiert :) – OnlyHope

0

Es funktioniert nicht so. Sie müssen auch etwas zurückgeben, um den Client darüber zu informieren, dass die Authentifizierung erfolgreich war oder fehlgeschlagen ist. Sie müssen über den programmatischen Arbeitsablauf nachdenken.

Sie können auf der von Ihnen aufgerufenen Seite eine statische Methode erstellen, die einen Wert in Form von Bool oder JSON zurückgibt. Etwas in dieser Richtung:

$.ajax({ 
    type: "GET", 
    url: "http://localhost:49317/LoginPageForLearn.aspx/Authenticate", 
    data: postData, 
    contentType: "application/json; charset=utf-8", 
    dataType: "jsonp" 
}); 

In Ihrem Erfolg oder Misserfolg Rückruf, Sie von dort beurteilen werde, was Sie wollen mit dem zurück tun:

[WebMethod] 
[ScriptMethod(UseHttpGet = true)] 
public static bool Authenticate JsonMethod(int username, string password) 
{ 
    bool isAuthenticated = // some method to authenticate 
    return isAuthenticated; 
} 

Ihre AJAX wie folgt aussehen würde Wert.

In jedem Fall wäre ein Handler wahrscheinlich besser, da es keine unnötige Markierung enthält.

+0

Vielen Dank Dennis .. Entschuldigung, wäre es möglich, wenn Sie mir sagen würden, wie der Handler arbeitet? – OnlyHope

+0

HttpHandlers sind nur Endpunkte und es reagiert auf Webanfragen. Es umfasst IHttpHandler und IHttpModule-Schnittstelle unter einigen. Generische Handler enden mit der Erweiterung .ashx. Sie können hier mehr lesen - http://msdn.microsoft.com/en-us/library/bb398986.aspx –

+0

Vielen Dank so viel. Sehr nützliche Informationen :) – OnlyHope