【发布时间】:2017-03-12 10:54:13
【问题描述】:
我已经尝试了几乎所有建议的解决方案,这些解决方案与我的问题有关,但没有运气。我正在创建一些图表(使用Dygraphs 库)。下面的 javascript 代码只是整个函数的一小部分;事实上,我以这种方式创建了 5 个图表。
<script>
designRawGraphs();
function designRawGraphs()
{
var g1 = new Dygraph(
document.getElementById("graphdiv"),
[ <%=sDataForROI1Graph%> ],
{
labels: <%=sLabelsForROI1Graph%>,
connectSeparatedPoints: true,
animatedZooms: true,
highlightCircleSize: 3,
highlightSeriesOpts: {
highlightCircleSize: 6
},
drawPoints: true,
title: 'ROI 1 - Region of Interest',
ylabel: 'Raw Fluorence Intensity',
xlabel: 'Time (seconds)'
}
);
}
</script>
在后面的代码中,我序列化(并作为String)两个 sDataForROI1Graph 和 sLabelsForROI1Graph 全局变量,它们用数据库的结果填充以特定格式查询(Dygraphs 的预期格式)。此 javascript 代码位于 asp:UpdatePanel 内。当我触发一个按钮(也在同一个 UpdatePanel 内)时,查询返回不同的结果,因此 sDataForROI1Graph 和 sLabelsForROI1Graph 都发生了变化,但图表没有重新设计(即全局变量的值没有使用 技术从后面的代码传递到客户端)。我还向触发按钮声明了Trigger 选项,如下所示...
<Triggers>
<asp:AsyncPostBackTrigger ControlID="RemoveAllbtn" />
</Triggers>
... 我的代码很简单,如下面的 sn-p 所示(实际上我重新运行了一个存储过程,它更新了 2 个全局变量 sDataForROI1Graph 和 sLabelsForROI1Graph em> 具有新值)
Protected Sub RemoveAllbtn_Click(ByVal sender As Object, ByVal e As EventArgs) Handles RemoveAllbtn.Click
RemoveAll()
End Sub
如果我删除 UpdatePanel,一切都会像魅力一样发挥作用,因为会发生完整的回发。我试图注入 javascript 代码并执行其他棘手的建议,但我还没有找到解决方法。
我的问题是为什么这 2 个全局变量在嵌套到 UpdatePanel 时不能从客户端访问?绕过这个问题的最佳方法是什么?我还阅读了有关隐藏文本框/隐藏字段/标签/文字控件的信息,但即使这些方法也无法帮助我解决问题。
编辑
诚然,以下建议的答案是我所需要的,而且效果很好,但是在我花了很多时间解决我的问题并将我的头撞到墙上之后,我意识到我的问题仍然存在并且原因太奇怪了。在客户端,在 UpdatePanel 之外,我创建了一个 <asp:HiddenField ID="hidfieldforROI1" runat="server"/> ,我试图像这样获得它的价值
var dataforROI1 = document.getElementById('<%= hidfieldforROI1.ClientID %>').value;
在后端,我将 Value 设置为 hidfieldforROI1 控件。我收到以下奇怪的错误:
error BC30451: 'dataforROI1' is not declared. It may be inaccessible due to its protection level.
如果有任何建议,我将不胜感激。
【问题讨论】:
-
用
Literal控件替换它?[ <asp:Literal ID="sDataForROI1Graph" runat="server"></asp:Literal> ], -
@VDWWD 你能告诉我如何使用javascript在客户端获取文字文本吗?
-
你不能。您在后面的代码中设置文字的值。
sDataForROI1Graph.Text = "yourJavaScriptStringValue";如果您使用<%= yourJavaScriptStringValue %>,它会在客户端提供完全相同的结果@ -
我想要做的是将文本从后面的代码传递到客户端,而不是相反。实际上,您的建议与
<%=stringvalue%>方法给出了相同的结果。但我的问题是创建图形的javascript代码为<%=sDataForROI1Graph%>和<%=sLabelsForROI1Graph%>获取了2 个初始值,即使它们在后面的代码中发生变化,它们在客户端也不会改变。 -
啊,我明白了。忽略我以前的cmets。您可能需要再次调用
designRawGraphs()来重建图形。将他的代码放在ScriptManager.RegisterStartupScript(Page, Page.GetType, "designRawGraphs", "designRawGraphs();", true)后面
标签: javascript asp.net asp.net-ajax updatepanel dygraphs