我目前在我的MVC 4应用程序中遇到问题。我在控制器私有变量,即凭借一个简单的类的实例:在视图间传递时,控制器中的变量丢失
private InstallationStatus status = null;
当数据再上一个视图提交时,它会充满这样的:
InstallationStatus installStatus = Install();
if (installStatus != null)
{
status = installStatus;
TempData["installPercent"] = 0;
return View("InstallationProgress", status);
}
这部分按预期工作,变应该设置为实例。
之后视图定期检查(使用AJAX)另一个变量:
<script type="text/javascript">
$(document).ready(function() {
var progress = 0;
$("div.status-message").text("Progress: " + progress + "%");
var statusUpdate = setInterval(function() {
$.ajax({
type: 'GET',
url: "/AppStart/GetInstallProgress",
datatype: "application/html; charset=utf-8",
success: function (data) {
progress = parseInt(data);
if (progress >= 100) {
clearInterval(statusUpdate);
var data = $(this).serialize();
$.ajax({
type: 'POST',
url: "@Url.Action("CompletedStatus", "AppStart")",
success: function() {
window.location = "/Login/Login"
}
});
}
$("div.status-message").text("Progress: " + progress + "%");
}
});
}, 2000);
});
</script>
当调用器上的“CompletedStatus”的动作,在控制器上变量“状态”为空(实例预先设定的不在那里?
我该如何确保其价值将持续?在我看来,像整个控制器实例丢失,但这并不真正对我来说 - “状态”的来源是web服务,一旦我得到实例InstallationStatus,我不能再次得到它 - 我需要保持它。
我试过使用TempData来存储它,但是因为在存储和检索它之间可能有多个步骤TempData证明不可靠。
最后的过程是:
- 请求安装状态和导航以查看安装进度(状态将被接收到时的进展将完成)。
- 导航,查看那里我将使用JavaScript每当我得到的回调从服务器与信息有关 进度更新安装进度
- 当安装完成(返回状态),该状态传递给 另一种观点认为
在上面的例子中,我有一些虚拟代码隐藏,所以状态立即返回,但是这对我的问题没有影响。
目前我可以做1和2,我可以调用最终的视图,但我不能在那里传递状态,因为我没有在控制器上,并且TempData对此不可靠(有时它仍然存在,有时不是这样)。
任何帮助将不胜感激。
你说的只是一次调用的安装过程是正确的(提供它不会最终出错,但总是有最大的一个运行)。事实上,在这一点上总共只有一个(这是SuperAdmin第一次启动应用程序时执行的操作)。客户端没有任何自己的数据库 - 它只能通过web服务进行通信。在这一点上,webservice也没有数据库 - “安装”方法实际上触发了为整个应用程序创建主数据库。所以我没有任何“外部”存储空间,我可以让我的状态持续下去...... – Erchi 2013-04-29 15:50:44