【发布时间】:2015-06-20 10:23:02
【问题描述】:
我有一个包含一些 javascript 的视图。 javascript 有一个回调函数,当我需要的数据准备好时(来自 indexeddb)。
这些数据,我想传递给局部视图 - 我该怎么做?我似乎无法使用 ViewData,因为它会在页面呈现后立即过期(因此,在收到回调之前)。有任何想法吗?代码在这里:
<div>
<script type="text/javascript">
var somecallback = myFunctionDefinedSomewhere();
somecallback.onsuccess = function(evt) {
console.log("Success!");
var iReallyNeedThisVariable = evt.id;
@ViewData["iReallyNeedThisVariable"] = iReallyNeedThisVariable;
}
</script>
@for (int i = 0; i < Model.MyCollection.Count; i++)
{
if (i == 0)
{
@Html.Partial("_MyPartialView", Model.MyCollection.ElementAt(i), new ViewDataDictionary { { "Stuff", true }, { "iReallyNeedThisVariable", @ViewData["iReallyNeedThisVariable"] } });
}
else
{
@Html.Partial("_MyPartialView", Model.MyCollection.ElementAt(i), new ViewDataDictionary { { "Stuff", false }, { "iReallyNeedThisVariable", @ViewData["iReallyNeedThisVariable"] } });
}
}
</div>
【问题讨论】:
-
您正在将服务器端代码与 JavaScript 混合。您不能从 JavaScript 设置
ViewBag。相反,您需要向Controller Action发出AJAX POST/GET调用,然后作为响应获取PartialView or JSON Data并在您的主视图中使用它。 -
我试图避免任何服务器端代码 - 我使用 serviceworkers 使网站在离线时工作
-
很遗憾你不能这样做
-
我不确定您所说的避免服务器端代码并在脱机时工作是什么意思。你能详细描述你的问题吗?因为即使你想动态渲染部分视图,也应该有服务器命中。
-
ServiceWorkers 可以缓存任何“正常”的 http 请求,并在浏览器离线时将它们提供给浏览器。它不,AFAIK,以同样的方式支持 AJAX。此外,这完全是客户端。我打开客户端 indexeddb,并在客户端呈现页面。我只想延迟部分视图的渲染,直到我与 indexeddb 建立开放连接
标签: javascript asp.net asp.net-mvc razor indexeddb