2017-08-04 5 views
0

リンクがあります。使用すると、新しいビューをロードしてから、自動的にアクションを呼び出したいと思う。しかし、私は、ActionResultメソッド内で "return"を使ってビューをロードすることしか知りません(したがって、後で別のアクションを呼び出すことはできません)。MVCでビューを表示してアクションを返す

多分私は全体のことを間違って考えているかもしれませんが、他の方法でこれを行う方法を理解することはできません。私が試した

ことの一つは、ビューからアクションを呼び出すことですが、私はアクションが自動的に起動させたいのに対し、@ Html.ActionLinkのようなものは、クリックして、ユーザーが必要になります。

編集:

数を尋ねたので、ここで私が何をしようとしています何のための動機は、(より良いアプローチを提案して自由に感じる!)です:

私はビューの中にユーザーをリダイレクトします長いプロセスが実行され、自動的にユーザーが最終ビューにリダイレクトされます。第2のアクションはプロセスを呼び出し、ユーザーが完了するとそのユーザーをリダイレクトします。私たちが知っていれば、私はそこに、より良い解決策があると考えられるが、

<script type="text/javascript"> 
    window.location = "@Url.Action("ActionName", "ControllerName")"; 
</script> 

+0

これの目的は何ですか?あなたの他の 'ActionResult'メソッドは何をしますか? –

+0

おそらくこれを行うより良い方法がありますが、長いプロセスが実行されている間にユーザーをビューにリダイレクトしてから、自動的にユーザーを最終ビューにリダイレクトします。第2のアクションはプロセスを呼び出し、ユーザーが完了するとそのユーザーをリダイレクトします。 – Pablo

+0

ユーザーを最初のビューにリダイレクトし、そのビューでajaxを使用して2番目のメソッドを呼び出し、成功コールバックで最終ビューにリダイレクト –

答えて

1

は、あなたはそれが</html>タグの前にビューの最後にこれを追加し自動化するために、ページのロード時にブラウザをリダイレクトするようにクライアントを取得する必要がありますあなたが克服しようとしている特定の問題。

+0

私は今や少し動機づけを説明しようとしました。これはうまくいくように思えます(私はまだ問題のより良い把握を得るために他の答えをチェックしなければなりません)。 – Pablo

0

私はuがこの

TransactionIndex.cshtml @model List<Transaction> @Html.Partial("../Transaction/_Transaction",model)

Main.chtml <a id="transactionLink" href='@Url.Action("GetMainTransactionView","Transaction")'/>

0

あなたにような何かを試すことができますすることができる、uがやろうとしているものを推測していますビューがレンダリングされた後に、クライアントからのasync ajax呼び出しを使用して別の要求を行うことができます。

$(document).ready(function(){ 
jQuery.get(url [, data ] [, success ] [, dataType ]) 
}); 

jQuery.get('mywebsite/mycontroller/myaction') 

その他のパラメータはオプションです。

あなたは自動的に別のアクションをトリガーすることができますし、成功コールバックで要求のREPONSEを扱うことができますこの方法。

$(document).ready(function(){ 
    jQuery.get('mywebsite/mycontroller/myaction', {id:1}, onSuccess); 
}); 
function onSuccess(response){ 
    // add logic to do whatever from response 
} 
+0

これは、? – Pablo

+0

@pablo JSがダウンロードされ、samirのコードがDOMが完全にロードされた後に起動するとすぐにコードが起動します。 – Adrian

+0

ええ、私は見る...私は両方の仕事をすることができるかどうかを見てみる、おそらく将来的には便利になるだろう。ありがとう! – Pablo

0

長時間実行されているリクエストのステータスを確認するには、javascriptを使用する必要があります。完了するとリダイレクトできます。

操作の現在の状態を再現するアクションを追加します。あなたのページで

public JsonResult GetLoadStatus(){ 
    //Get status from somewhere 
    bool isLoaded = ... 
    return Json(isLoaded, JsonRequestBehavior.AllowGet); 
} 

、あなたはjQueryの(これをテストしていない)していると仮定すると:

<div id="LoadStatus">Loading...</div> 


<script> 
    var loadingCompleted = false; 

    function checkStatus(){ 
     $.get('/MyController/GetLoadStatus') 
      .done(function(isLoaded){ 
       if(isLoaded){ 
        loadingCompleted = true; 
        window.location.href = "/resulturl"; 
       } 
      }) 
      .fail(function(){ 
       alert("Error getting load status"); 
      }) 
      .always(function(){ 
       //Whether the call to your GetLoadStatus method failed or succeeded, always check again in 1 second. 

       if(loadingCompleted === false){ 
        setTimeout(checkStatus, 1000); 
       } 
      }); 
    } 

    checkStatus(); 
</script> 
+0

興味深い!私の最初のアプローチは、このようなことをすることでしたが、実際にはこれを動作させることはできませんでした。私はまた、このアプローチを働かせようと試みます(学習する場合のみ)。 – Pablo

関連する問題