2012-04-03 16 views
0

html、ajax & ASP.NETを使用してログインページを作成しようとしています。データは本当にajax関数に渡されますが、私はASPページをデバッグするときにユーザー名とパスワードNULLで送信されます。 コードは、その後、ユーザ名&パスワードを取ることになっているが、ユーザーIDを返し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を通じてクリアテキストでパスワードを送信していますか?あなたはセキュリティを全く考慮していますか? –

+0

ええ、残念です、私はまだ学んでいます。あなたは良いアイデアを持っていますか? – OnlyHope

+1

はい、HTTPSを使用します。また、Webサーバーのログにパスワードを取得しないようにPOST動詞を推奨します。 –

答えて

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

+1

PageMethodと呼ばれています。これは静的メソッドで、ASP.NETページで定義し、AJAX呼び出しを使用して呼び出すことができ、JSON要求をJSFリクエストに送信する '[WebMethod]'属性で修飾されています。基本的には、サーバー側の機能の一部をクライアントのスクリプトに公開することができます。 –

+0

Aha、Ok ... ありがとうございます 今すぐ試してみて、どうなるか見てください:) – OnlyHope

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

ありがとうDennis ..すみません、ハンドラの仕組みについて教えてもらえますか? – OnlyHope

+0

HttpHandlerは単なるエンドポイントであり、Web要求に応答します。これには、IHttpHandlerとIHttpModuleインターフェイスが含まれています。一般的なハンドラは.ashx拡張子で終わります。 詳細はこちら - http://msdn.microsoft.com/en-us/library/bb398986.aspx –

+0

ありがとうございました。非常に有用な情報:) – OnlyHope

関連する問題