ASP.NET MVC 在部分视图中使用 javascript 值
ASP.NET MVC Use javascript value in partial view
我有一个视图,里面有一些 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
。
相反,您需要 AJAX POST/GET
调用 Controller Action(或 Service Workers
),然后作为响应获取 PartialView
或 JSON Data
并使用它在您的主视图中。
更新:
OP 确认 AJAX Service Worker 的 Fetch 事件支持调用。
我有一个视图,里面有一些 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
。
相反,您需要 AJAX POST/GET
调用 Controller Action(或 Service Workers
),然后作为响应获取 PartialView
或 JSON Data
并使用它在您的主视图中。
更新: OP 确认 AJAX Service Worker 的 Fetch 事件支持调用。