【问题标题】:ASP.NET MVC Use javascript value in partial viewASP.NET MVC 在局部视图中使用 javascript 值
【发布时间】: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


【解决方案1】:

您正在将服务器端代码与 JavaScript 混合。您不能从 JavaScript 设置 ViewBag。

相反,您需要对控制器操作(或Service Workers)进行AJAX POST/GET 调用,然后获取PartialView 或JSON Data 并在主视图中使用它作为响应。

更新: OP 确认 Service Worker 的 Fetch 事件支持 AJAX 调用。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-11-09
    • 1970-01-01
    • 2013-09-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-06
    相关资源
    最近更新 更多