2012-03-09 14 views
0

私はコントローラアクションにフォームをポストしています。コントローラからエラーが発生しています。このAjaxフォーム投稿の問題を取り除くにはどうすればよいですか?

これは、私が必要とする動作です。 エラーの場合 - ページをリフレッシュせずに同じページに正しいエラーメッセージを表示します。 もし成功 - 再度、何ページでは私が取得していますが、ページが別のURLと完全にリフレッシュ取得し、表示されていることである

を更新していないページで成功メッセージを表示し、この: {「ステータス」:「失敗」、「MSG」 :「\ u0027Name \ u0027」}これに

URLの変更:../respond/update私は

に投稿するアクションは基本的に私はこの失敗の状態をキャッチし、スパン内のMSGを表示したいれます。

しかし、なぜ私は別のページに連れて行っていますか?ここで

は図である。

@using (Html.BeginForm("Update", "Respond", FormMethod.Post, new { id = "frmUpdate" })) 
{ 
    //have my form here 
    //submit button 
} 

Here is the js handler that posts the form: 
$('#frmUpdate').submit(function() { 
      //validation 
      $.ajax({ 
       url: this.action, 
       type: this.method, 
       data: $(this).serialize(), 
       beforeSend: //show loader 
       success: function (result) { 
        alert(result.status);      
       }, 
       error: function (xhr, status, error) { alert('error'); } 
      }); 
      return false; 
     }); 

Here is controller: 
[HttpPost] 
public ActionResult Update(ResponseModel model) 
{ 
    return Json(new { status="Failed", msg = "Name" }); 
} 

EDIT:Firefoxので はそれがdiffernt URLになります。 しかし、IE8ではjquery自体からこのエラーが出ます。興味深い...

メッセージ:オブジェクトはこのプロパティまたはメソッドをサポートしていません ライン:28 文字:12724 コード:0 URI:/Content/js/external/jquery-1.6.2.min.js ?V = 3

+1

コンソールにJavaScriptエラーが表示されていませんか? beforeSendコールバックには何がありますか? beforeSendコールバックを完了していないため、あなたの質問に表示されているものはjavascriptが無効です。 –

+1

また、あなたのJSONに '\ u0027'があることに気付きました。コントローラーの動作がここに表示されているように見える場合、それらは存在してはいけません。 –

+0

私はIE8でjsエラーで質問を更新しました。コントローラからすべてのコードを削除して分かりやすくしました。またbeforesendは大丈夫です。私はそれが処理されているローダーを表示するだけです。 FireFoxの – kheya

答えて

1

私はあなたがデフォルトでそうすることによって行動を提出止めるべきだと思う:

$('#frmUpdate').submit(function (e) { 
    e.preventDefault(); 
    <your code here> 
}); 

そうでない場合はフォーム送信は、あなたが避けたい行動を引き起こして起こります。 これが役立つことを願っています。

+1

彼は、デフォルトのアクションをキャンセルするサブミットハンドラからfalseを返します。 –

+1

ダーリンは右 – kheya

+0

@ダリンディミトロフ:ありがとう。私はそれを見ていない、あなたは正しい。 –

0
@using (Html.BeginForm("Update", "Respond", FormMethod.Post, new { id = "frmUpdate" })) 
{ 
    //have my form here 
    //submit button 
} 

送信ボタンを使用している場合は、ページを送信します。送信する代わりにタイプボタンを使用する必要があります。

それが動作します。

@using (Html.BeginForm("Update", "Respond", FormMethod.Post, new { id = "frmUpdate" })) 
{ 
    //have my form here 
    //use type button 
} 
+1

サブミットされたサブミット・ハンドラは、サブミット・ボタンではなくタイプ・ボタンを使用すると呼び出されません。 –

+0

@ダリン...しかし、私たちはそのクリックイベントでjavascript関数を呼び出すことができ、条件をすべて満たしていればそのフォームを送信して偽を返します..... function ValidateUser(){ var isReturn =偽; if(isReturn){ $( "#userfrm")。submit(); } else { falseを返します。 } } –

関連する問題