2017-08-04 21 views
0

我有一個鏈接。使用時,我想加載一個新視圖,然後自動調用一個動作。但我只知道在ActionResult方法中使用「return」加載視圖(所以我以後不能再調用另一個操作!)。返回視圖然後在MVC中操作

也許我只是在想整個事情是錯的,但我無法弄清楚如何以其他方式做到這一點。

我試過的一件事是從視圖中調用動作,但像@ Html.ActionLink這樣的東西需要用戶單擊,而我想要動作自動觸發。

編輯:

由於幾問,這裏是什麼,我試圖做的動機(隨時提出更好的方法!):

我想將用戶重定向到一個視圖,而一個漫長的過程運行,然後自動將用戶重定向到最終視圖。第二個操作將調用該進程並在完成時重定向用戶。

+0

這樣做有什麼目的?你的其他'ActionResult'方法做什麼? –

+0

也許有更好的方法來做到這一點,但我想在長時間運行的過程中將用戶重定向到視圖,然後自動將用戶重定向到最終視圖。第二個操作將調用該進程並在完成時重定向用戶。 – Pablo

+0

您可以將用戶重定向到第一個視圖,並在該視圖中使用ajax調用第二個方法,並在其成功回調中,重定向到最終視圖 –

回答

1

你需要讓客戶端重定向頁面加載瀏覽器,自動它在視圖的末尾</html>標籤之前補充一點:雖然我懷疑有更好的解決方案,如果我們知道

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

你正試圖克服的具體問題。

+0

我試圖解釋一下現在好一點的動機。這似乎工作,但(我必須檢查其他答案還沒有得到更好地理解這個問題)。 – Pablo

0

我只是猜測什麼ü正在嘗試做的,可ü可以嘗試這樣的事情

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

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

0

你可以在呈現視圖後使用來自客戶端的異步ajax調用進行另一個請求。

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

例如,

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

其他是可選參數。

這樣,您可以自動觸發另一個操作,並可以處理成功回調中請求的響應。

$(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下載後立即激活,並且在DOM被完全加載後samir的代碼將會觸發。 – 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

相關問題