Return 相同的视图似乎没有刷新页面
Return same view does not seem to refresh page
我有一些控制器方法可以处理 WMI 类(唤醒选定的机器、打开或关闭进程、启动 RDP 会话),然后重新加载当前视图。要重新加载,我尝试了以下操作:
return View();
return RedirectToAction("Index", "RenderNodesController");
return RedirectToAction("Index");
return Redirect(Request.UrlReferrer.ToString());
关于执行 WMI 调用的所有方法都成功执行,但 return 语句不会重新加载页面。如果我手动刷新页面,它会重新加载并按预期显示更改的信息。同样奇怪的是,如果我在调试器中逐步执行 return 语句,我会看到视图的 Index 方法已执行,因此在这种情况下调试似乎无济于事。
如果有任何帮助,我将不胜感激。
我还是不知道为什么
return 查看();
和类似的不执行但最后我使用 Javascript 的 window.location.reload() 让它工作,为了完整性下面的完整脚本:
<script type="text/javascript">
$(document).ready(function () {
$('.checkbox').click(function () {
var url = '@Url.Action("CallProcess", "RenderNodes")';
var networkname = $(this).data("networkname");
var processname = $(this).data("processname");
var filename = $(this).data("filename");
var start = $(this).is(':checked');
$.post(url, { NetworkName: networkname, ProcessName: processname, FileName: filename, Start: start },
function (data) {
$("#CallProcess").html(data);
});
window.location.reload(true);
})
});
</script>
只是想为这个答案添加一些解释:
因为您正在执行一个 AJAX 请求,它不会在成功时重新加载用户的浏览器页面,它所做的只是 return 在结果中调用的操作方法的结果范围。 $.post 是 $.ajax 的 shorthand 版本,因此行为相同。
解决方法:
使用例如 location.reload(true)
(就像你所做的那样)。
我有同样的问题,我的解决方案有点棘手,但它有效。而不是使用
return View("/MyRedirectView.cshtml");
在控制器中,我使用了一个
return RedirectToAction("MyRedicrectAction");
动作是这样的:
[AllowAnonymous]
public ActionResult MyRedicrectAction()
{
return View("/MyRedirectView.cshtml");
}
我有一些控制器方法可以处理 WMI 类(唤醒选定的机器、打开或关闭进程、启动 RDP 会话),然后重新加载当前视图。要重新加载,我尝试了以下操作:
return View();
return RedirectToAction("Index", "RenderNodesController");
return RedirectToAction("Index");
return Redirect(Request.UrlReferrer.ToString());
关于执行 WMI 调用的所有方法都成功执行,但 return 语句不会重新加载页面。如果我手动刷新页面,它会重新加载并按预期显示更改的信息。同样奇怪的是,如果我在调试器中逐步执行 return 语句,我会看到视图的 Index 方法已执行,因此在这种情况下调试似乎无济于事。 如果有任何帮助,我将不胜感激。
我还是不知道为什么 return 查看(); 和类似的不执行但最后我使用 Javascript 的 window.location.reload() 让它工作,为了完整性下面的完整脚本:
<script type="text/javascript">
$(document).ready(function () {
$('.checkbox').click(function () {
var url = '@Url.Action("CallProcess", "RenderNodes")';
var networkname = $(this).data("networkname");
var processname = $(this).data("processname");
var filename = $(this).data("filename");
var start = $(this).is(':checked');
$.post(url, { NetworkName: networkname, ProcessName: processname, FileName: filename, Start: start },
function (data) {
$("#CallProcess").html(data);
});
window.location.reload(true);
})
});
</script>
只是想为这个答案添加一些解释:
因为您正在执行一个 AJAX 请求,它不会在成功时重新加载用户的浏览器页面,它所做的只是 return 在结果中调用的操作方法的结果范围。 $.post 是 $.ajax 的 shorthand 版本,因此行为相同。
解决方法:
使用例如 location.reload(true)
(就像你所做的那样)。
我有同样的问题,我的解决方案有点棘手,但它有效。而不是使用
return View("/MyRedirectView.cshtml");
在控制器中,我使用了一个
return RedirectToAction("MyRedicrectAction");
动作是这样的:
[AllowAnonymous]
public ActionResult MyRedicrectAction()
{
return View("/MyRedirectView.cshtml");
}