2016-04-04 17 views
0

私はAjax.BeginForm()UpdateTargetIdを使用しています。しかし、ユーザーがフォームを正常に完成し、処理を完了したら、それらを新しいページにリダイレクトする必要があります。Ajaxのポストバック - 再び完全なビューをレンダリングし

RedirectToAction()を呼び出すとそこからビューを返すことは、IDを対象としているため動作しません。

また、アクションにパラメータを渡す必要があります。

return JavaScript("window.location = 'http://www.somewhere.com/blah/blah?aMyParam=123'"); 

もっと簡単な方法はありますか?

+1

リダイレクトする場合、なぜあなたは 'Ajax.BeginForm()'を使用していますか? (Ajaxの全ポイントは同じページにとどまる) - 標準フォームを提出しないのはなぜですか? –

+1

@Stephen私は検証中ですが、私は完全なポストバックなしで部分的な更新を行いたいからです。これは、フォームがページ上の他の「領域」の一部であり、データベースから取得したときに「重い」ため、検証が失敗するたびにフルページの更新を実行することは、UXではあまり役に立ちません。 – TheEdge

答えて

1

あなたがやっている方法が正しいですが、これを行うために、よりエレガントな方法を以下に示されているが: -

コントローラ -

[HttpPost] 
public ActionResult MyAction(MyModel model) 
{ 
    if (model.SomeCondition) 
    { 
     // return to the client the url to redirect to 
     return Json(new { url = Url.Action("MyAction2") }); 
    } 
    else 
    { 
     return PartialView("_MyPartialView"); 
    } 
} 

ビュー -

@using (Ajax.BeginForm("MyAction", "MyController", new AjaxOptions { OnSuccess = "onSuccess", UpdateTargetId = "foo" })) 
{ 
    ... 
} 

Javascriptを -

var onSuccess = function(result) { 
    if (result.url) { 
     window.location.href = result.url; 
    } 
} 

上記のように、コントローラアクションからJson(url)を返してから、onSuccess javascript関数からリダイレクトすることができます。

関連する問題