2009-09-02 27 views
2

私は立ち往生しています、誰が私を助けることができますか?その下Asp.NET MVC Ajax-FORMとAjax-Getを投稿

<form id="loginform" method="post" action="/Account/LogOn/"> 

、私は、OPTIONのドロップダウンリスト、確認ボタンで隠しDIVをしました:私のLogOn.aspxビューでは、私は、FORMタグ内のコントロール(ユーザー名、パスワード、リメンバー・ミー)のログインましたonclick_event:

$.ajaxSetup({ cache: false }); 
$.ajax({ 
    type: "GET", 
    url: "/Account/SetCompanyAndContinue", 
    data: "{ 'id' : '1'}", 
    contentType: "application/json; charset=utf-8", 
    dataType: "json" 
}); 

まず、jQueryのでは、私はAJAXを経由してログイン資格情報を投稿し、ユーザーがログイン:

var loginCred = new Object(); 
loginCred.Username = $('#userName').val(); 
loginCred.Password = $('#password').val(); 
loginCred.RememberMe = $('#rememberMe').checked; 

var myJsonObject = JSON.stringify(loginCred); 

$.ajaxSetup({ cache: false }); 
$.ajax({ 
    type: "POST", 
    contentType: "application/json; charset=utf-8", 
    url: "/Account/LogOnAjax/", 
    data: myJsonObject, 
    dataType: "json", 
    success: function(data) { 
     PostCredentialsSuccess(data); 
    } 
}); 

このPOSTは完璧に動作します。コントローラアクションのブレークポイントはデバッガによってヒットされ、データのJSONオブジェクトを返します。このJSONデータをOPTIONドロップダウンリストに入れます。このOptionドロップダウンリストは、ユーザーに表示されます。

[AcceptVerbs(HttpVerbs.Get)] 
    public ActionResult SetCompanyAndContinue(string id) 
    { 
     SessionAdapter.CustomerID = Convert.ToInt32(id); 
     return null; 
    } 

しかし、それアイン:

$.ajaxSetup({ cache: false }); 
$.ajax({ 
    type: "GET", 
    url: "/Account/SetCompanyAndContinue", 
    data: "{ 'id' : '1'}", 
    contentType: "application/json; charset=utf-8", 
    dataType: "json" 
}); 

は、私が「SetCompanyAndContinue」という名前のコントローラのアクションがヒットされることを期待する:ユーザーが確認ボタンをクリックしたときに続いて、第二AJAX呼び出しが行われますtが起こって、代わりに、デフォルトコントローラアクションの初めてのヒットを取得:(!)

public ActionResult LogOn() 
    { 
     return View(); 
    } 

しかし私は(同じ)をクリックし二度目確認ボタンは、コントローラのアクションは最終的に[SetCompanyAndConを打ちますスズメ]。

誰かが私が間違っていることを教えてもらえますか?事前に多くの感謝。

+0

確認ボタンにどのようにバインドしていますか? – karim79

答えて

0

愚かな間違い:

  • 私はwebbrowerが予測不可能な振る舞いを作っ応答ストリームにクッキーを追加しました。
  • 私はこれを返信としてマークするのを忘れました
0

通常の送信ボタンの代わりにリンクを使用してみると、おそらくクリック、ajax、フォームの間に矛盾があります。

0

正しい情報があるかどうかはわかりませんでした。しかし、あなたの説明によると、「送信」ボタンをクリックすると、「取得」メソッドではなく「ポスト」メソッドが実行されます。 「Get」コールは、最初にページにアクセスしたとき、またはURLを更新したときにのみ実行されます。 リンクボタンを使用して、「取得」アクションを実行します。

あなたのサンプルでは、​​このアクションを「ポスト」メソッドで呼び出す "/ Account/LogOnAjax /"という理由があります。

2

あなたは私のようなそのように小さなミス、jQueryのから送信するのですか、実際のHTTPリクエストを見て放火犯を使用することをお勧めします

$.ajax({ type: "GET", 
    url: "/Account/SetCompanyAndContinue", 
    data: ({id : 1}), 
    contentType: "application/json; charset=utf-8", 
    dataType: "json" }); 

javascriptオブジェクトとしてではない文字列としてデータプロパティを渡す必要がありますこれは非常に迅速に明らかになります。あなたがFiddlerまたはCharlesなどのデバッグHTTPプロキシを使用することができます別のGETリクエストを比較すること

HTH

0

marc.dは(少なくともそれは私のために動作します)右

親指の一般的なルールだった:あなたが期待するようなあなたの行動がヒットされていない場合、それは何かがあなたのルートのparamsを持つ場合、または間違っている可能性がありますあなたは既定のルートに落ちています。投稿と一緒に送信されるフォームデータは、予想通りのものではありません。私は$(これ)を使っていました。$ postのJQueryデータ引数としてserialize()を行い、隠しフォームフィールドの1つが空でした。どのルートにも含まれていなかったアクション(この場合はデフォルトに落としていました)は、投稿を見たことがありませんでした。私に代わっから

関連する問題