1

シナリオ:

ブラウザーで JavaScript が有効になっている場合に自動的に ajax を使用する MVC ウィザードを作成しました。ウィザードの各ステップは PartialView です (私は ASP.NET MVC 3 を使用しています)。

すべて正常に動作します。

問題は、たとえば、ユーザーがウィザードに入力した結果としてユーザーのステータスが変化した場合に、ページを更新することです。たとえば、ウィザードがユーザーをログインまたは登録する場合。ウィザードが AJAX を介して部分ビューを取得することによってステップからステップへ「移動」するとき、ユーザーのステータスの変更を反映するためにページが更新されません (たとえば、匿名ユーザーが現在登録されています)。

私がしたいこと:

基本的に、ページ全体を更新する必要がある場合は、AJAX を介してウィザードの現在のステップに対応する部分ビューを配信した後、クライアントで次を自動的に実行する必要があります。

location.reload();

問題:

DOM は AJAX 経由で変更されているため、ユーザーの介入 (ボタンのクリックなど) なしで JavaScript (location.reload();) を実行する方法がわかりません。

助言がありますか?私はしばらく仕事を休んでいて、スピードを取り戻すのに苦労しています。

4

3 に答える 3

1

今のところ、次の記事のコードを使用して問題を解決しました。

ASP.NET MVC 使用時の AJAX 呼び出し後のリダイレクト

私はこの記事で説明したアプローチが好きです。非常に MVC の方法で再利用可能なコードが得られるからですAjaxController.cs。私は、すべての AJAX 対応コードをカプセル化するベース コントローラー ( ) を既に持っており、これはそれに追加するのに適しています。

ただし、このアプローチには 2 つの問題があります。

  1. ウィザードからリダイレクトする必要があるため、ウィザードの最後のステップでのみ機能します。ウィザードの途中でユーザーのステータスが変化した場合でも、私はまだ動揺しています。

  2. このようにリダイレクトするだけでなく、AJAX 呼び出し後にページを更新する方法を知りたいです。

誰かが答えを持っているなら、私は喜んで彼らにビスケットをあげます.

于 2012-09-11T13:45:35.730 に答える
0
// C# code
public ActionResult Foo(Bar bar)
{
    // code here
    return Json(new
    {
        Success = true,
        Value = this.RenderPartialViewToString("PartialViewName", bar),
        Callback = "window.location.href = 'http://yourdomainurl.com/';"
    });
}


// jQuery Ajax
$.ajax({
    type: "POST",
    url:  "/urlWhereToPost",
    data: ("form#id").serialize(), 
    dataType: 'json',
    async: false,
    beforeSend:  function() {
        // some instruction
    },
    error: function(e) {
        alert(e.responseText);
    },      
    success: function(data) {
        if (data.Success) {
            if (data.Callback != null) {
                if (data.Callback.length > 0) {
                    jQuery.globalEval(data.Callback);
                }
            }
        }
        else {
            // do something
        }
    }
 });        
于 2012-09-11T13:48:14.870 に答える
0

あなたの ajax 呼び出しがどのように構成されているかはよくわかりませんが、MVC Ajax ヘルパーを使用している場合はlocation.reload();、次のように OnComplete メソッドを呼び出すだけです。

@using (Ajax.BeginForm(new AjaxOptions{OnComplete = "javascriptfunction"}))
{
    //Data and submit button
}
<script>
    function javascriptfunction(){
        location.reload();
    }
</script>
于 2012-09-11T13:40:08.747 に答える