2017-10-30 3 views
0

いくつかの製品とログインページを表示するシステムがあります。ページの分離コード(LoginPage.aspxでaspx.csの機能にアクセスしようとすると、ajaxから内部エラー500が発生する

function CheckSignIn() { 
var re = /[0-9]/; 
if (!re.test($('#PasswordInput').val())) { 
    alert("Password must contains only digits!"); 
} 
else 
{ 
    name = $('#UserNameINPUT').val(); 
    pass = $('#PasswordInput').val(); 
    var user = { 
     userNamePar: name, 
     passPar:pass 
    } 
    $.ajax({ 
     url: "LoginPage.aspx/CheckLoginCodeBehind1", 
     dataType: "json", 
     type: "POST", //use only POST! 
     data: JSON.stringify(user), 
     contentType: "application/json; charset=utf-8", 
     error: function(jqXHR, exception) { 
      alert(formatErrorMessage(jqXHR, exception)); 
     }, 
     async: false, 
     success: function (result) { 
      debugger; 
      if (result == "") { 
       alert("User Not found"); 
      } else { 
       window.location = "ProductsPage.aspx"; 
      } 
     } 
    }); 
} 

を: 私のLoginPage.aspx iにおいては、入力のすべてのコントローラなどを持っている は今、私はいくつかのJavaScriptがAJAXでログインして処理するために、この機能を持つファイルがあります。 CS)私はこの方法

protected string CheckLoginCodeBehind1(string userNamePar, string passPar) 
    { 
     string PW_input = PasswordInput.ToString(); 
     bool isValid = PW_input.All(char.IsDigit); 
     temp = GetUsers2(userNamePar, passPar); 


     if (isValid) 
     { 
      if (UserNameinput.ToString() != null) 
      { 
       if (temp != null) 
       { 
        result = "UserOK"; 
        return result; 
       } 
      } 
     } 
     return result; 
    } 
} 

を持っている..だから私の問題は、私がログインしようとしたとき、私は500

jquery.min.js:4 POST http://localhost:61405/LoginPage.aspx/CheckLoginCodeBehind1 500 (Internal Server Error) 

、いつIntrnalエラーを取得していますクライアント側でデバッグするのは、コードがAJAXセクションを通過するようです。 どうすればよいですか? 助けてくれてありがとう!

編集 これは、ユーザーがデータベースにある場合、私がチェック機能である:

public string GetUsers2(string un, string pw) 
    { 
     Users u1 = null; 
     try 
     { 
      Comm.CommandText = "SELECT * FROM UsersTB WHERE UserName = @name AND Password = @pass"; 
      Comm.Connection.Open(); 
      Comm.Parameters.Add(new SqlParameter("@name", un)); 
      Comm.Parameters.Add(new SqlParameter("@pass", pw)); 
      //bool flag = false; 

      Reader = Comm.ExecuteReader(); 
      if (Reader.Read()) 
      { 
       u1 = new Users(Reader["UserName"].ToString(), Reader["Password"].ToString()); 
      } 
     } 
     catch (SqlException e) 
     { 
      Console.WriteLine(e); 
     } 
     finally 
     { 
      Comm.Connection.Close(); 
     } 
     JavaScriptSerializer json = new JavaScriptSerializer(); 
     return json.Serialize(u1); 
    } 
+4

サーバー側のコードから500エラーが発生しています。私はあなたがブレークポイントを配置し、それを介して歩くことをお勧めします –

+0

何か "PasswordInput.toString()"あなたに与えると思われる?確かにあなたはpassParを使うべきですか? – BugFinder

+0

@BugFinder "PasswordInput.toString()"は、ユーザーが入力したパスワードです。 passParは、GetUser2関数のDataBaseでOKであればチェックしたパスワードパラメータです。 –

答えて

0

、変更する必要があります:

protected string CheckLoginCodeBehind1(string userNamePar, string passPar) 

へ:

[System.Web.Services.WebMethod] 
public static string CheckLoginCodeBehind1(string userNamePar, string passPar) 

WebフォームのコードビハインドへのAjax呼び出しは、webmethod属性で修飾する必要があります。あなたのjsパラメータで

、あなたも、あなたがパラメータとして通過しているユーザーオブジェクトがあります。

var user = { 
    userNamePar: name, 
    passPar:pass 
} 

... 

data: JSON.stringify(user), 

あなたは2つの文字列を定義しているとしてあなたのサーバーのメソッドは、このユーザーオブジェクトを期待されていないので、私は希望をあなたはユーザーオブジェクトを作成し、変更しないことをお勧め:

data: JSON.stringify(user), 

へ:

data: JSON.stringify({"userNamePar": name, "passPar" : pass}), 

はまた、あなたがコントロールを参照することが表示されます。

string PW_input = PasswordInput.ToString(); 

あなたがこれまでのところ、私は承知していますようアヤックスを経由してWebメソッドでのaspxコントロールサーバ側にアクセスすることはできません。これを行う必要がある場合は、通常のポストバック要求を使用することをお勧めします。

+0

お返事ありがとうございます。私はあなたの提案を試み、それはまだ仕事をしないと私はIntertnalエラー500を取得 –

+0

あなたは、メソッド内のブレークポイントを設定し、ステップスルーできますか? –

+0

jsを見ると、ユーザーオブジェクト.. "var user"が作成されました。サーバーメソッドは2つの文字列パラメータを必要としています。私は私の答えに追加します –

関連する問題