2012-03-25 8 views
1

私は数十の答えを読みましたが、解決策を見つけることができませんでした。 私はRazorでMVC 3を使用しています。私はajaxを介してクライアントの検証と簡単なフォームを持っています。この部分はうまく動作します。私の問題は次のとおりです。コントローラの更新アクションで、別のアクションにリダイレクトしたいです。ユーザーがJavacriptを無効にすると、これは正常に動作します。しかし、javascript/ajaxを有効にすると、リダイレクトアクションは機能していないようです。代わりに、ある種のpartialviewなどが実行されているかのように見えます。Ajaxはリダイレクトを送信しますMVC 3

私のコントローラ/アクションコード:

Function UpdateItem(Item As CItem) As ActionResult 

    ' some validation code, save etc. 

    if everythingok then 
     Return RedirectToAction("Updatesuccess") 
    else 
     Return RedirectToAction("EditItem") 
    endif 

End Function 

私のhtmlページには、(短縮/疑似)のようになります。

フォームは、新しいHTMLコードを超えて追加されたAJAXを経由して送信され
Logo image 
H1 
some text 

<form>....</form> 

"some text"なので、フォームは置き換えられますが、置き換えられたフォームの上のものはすべてページに残ります。 ajax/javascriptが無効になっている場合、サブミット後に新しいページが読み込まれます。私はhttpヘッダーをチェックして、ajaxにはリダイレクトがないことに気づいた(それはajaxなので何とか論理的です)。 どうすればいいですか?私は新しいページにリダイレクトしたい。

ajax-submitを無効にして、「通常の」form-submitのみを使用できますか? 私は、クライアントがデータを入力していて、これを使用している間にajaxによる検証が好きですが、私にとっては、送信が「通常の」送信であれば十分です。

誰かが私が欲しいものを理解して助けてくれることを願っています。

ありがとうございました。

答えて

3

私は私はあなたの質問を理解して、100%わからないんだけど、一体、私をdownvoteいないもの:)

問題があり、ヘッダに示されたリダイレクトでのHttpResponseを送る経由で作品をリダイレクトこれはブラウザが理解するものです。 AJAXを介して送信する場合、リクエストを処理するのはブラウザではなく、独自のJSコードです。

リダイレクトを返す代わりに、URL(好ましくはjson)を返してから、window.locationを使用して手動でリダイレクトします。私はVBに堪能ではないよ は、ここで私はC#でそれを行うだろうかです:

jQueryので
var url = new UrlHelper(this.ControllerContext.RequestContext); 
var link = url.Action("UpdateSuccess"); 
return Json(new {link}); 

、その後:あなたの答えのための

$.ajax({ method: 'POST', 
      url: 'your post url', 
      success: function(result) {window.location = result.link; }, 
      // ... (passing form etc) 
    }); 
+0

感謝。私はjsでそれほど強いわけではないので、実行するにはしばらく時間がかかりましたが、それは問題ありません。 –

関連する問題