我有一个链接。使用时,我想加载一个新视图,然后自动调用一个动作。但我只知道在ActionResult方法中加载带有“return”的视图(所以我以后不能调用另一个动作!)。
也许我只是在考虑整件事情,但我无法弄清楚如何以其他方式做到这一点。
我尝试过的一件事是从视图中调用动作,但像@ Html.ActionLink这样的东西需要用户点击,而我希望动作自动触发。
编辑:
由于一些人问,这是我想要做的动机(随意提出更好的方法!):
我想在长时间进程运行时将用户重定向到视图,然后自动将用户重定向到最终视图。第二个操作将调用该进程并在用户完成时重定向。
答案 0 :(得分:1)
您需要让客户端在页面加载时重定向浏览器,以便自动将其添加到</html>
标记之前的视图末尾:
<script type="text/javascript">
window.location = "@Url.Action("ActionName", "ControllerName")";
</script>
虽然如果我们知道您要克服的具体问题,我怀疑有更好的解决方案。
答案 1 :(得分:0)
我只是猜测你要做什么,也许你可以尝试这样的事情
<强> TransactionIndex.cshtml 强>
@model List<Transaction>
@Html.Partial("../Transaction/_Transaction",model)
<强> Main.chtml 强>
<a id="transactionLink" href='@Url.Action("GetMainTransactionView","Transaction")'/>
答案 2 :(得分:0)
您可以使用来自客户端的异步ajax调用在呈现视图后发出另一个请求。
$(document).ready(function(){
jQuery.get( url [, data ] [, success ] [, dataType ] )
});
e.g。
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
}
答案 3 :(得分: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>