<%=值%GT;未在更新面板

时间:2016-10-29 21:29:10

标签: javascript asp.net asp.net-ajax updatepanel dygraphs

我已经尝试了几乎所有建议的解决方案,这些解决方案都发布在这里并且与我的问题无关,没有运气。我正在创建一些图表(使用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 都会被更改,但图形不会重新设计(也就是说,全局变量的值没有通过&lt;%= =&gt;技术从代码传递到客户端。我还向被触发的按钮声明了Trigger选项,如下所示......

   <Triggers>
        <asp:AsyncPostBackTrigger ControlID="RemoveAllbtn" />
   </Triggers>

...我的代码很简单,如下面的代码片段所示(实际上我重新运行了一个存储过程,它更新了2个全局变量 sDataForROI1Graph sLabelsForROI1Graph 用新值)

Protected Sub RemoveAllbtn_Click(ByVal sender As Object, ByVal e As EventArgs) Handles RemoveAllbtn.Click
    RemoveAll()
End Sub

如果删除UpdatePanel,一切都像魅力一样,因为会发生完整的回发。我试图注入javascript代码并执行其他棘手的建议,但我还没有找到解决方法。

我的问题是为什么在嵌套到UpdatePanel时无法从客户端访问这两个全局变量?绕过此问题的最佳方法是哪种?我还阅读了隐藏的Textboxes / HiddenFields / Labels / Literals控件,但即便是这些方法也无法解决我的问题。

修改

不可否认,以下建议的答案是我需要的,而且工作正常,但是经过大量时间花在我的问题上,并且撞到了墙上,我意识到我的问题仍然存在原因太奇怪了。在客户端,UpdatePanel之外我创建了一个<asp:HiddenField ID="hidfieldforROI1" runat="server"/>,我试图获得它的价值

var dataforROI1 = document.getElementById('<%= hidfieldforROI1.ClientID %>').value; 

在后端,我将Value设置为hidfieldforROI1 Control。我收到以下奇怪的错误:

error BC30451: 'dataforROI1' is not declared. It may be inaccessible due to its protection level.

我将不胜感激任何建议。

1 个答案:

答案 0 :(得分:0)

在aspx文件中

<asp:UpdatePanel ID="UpdatePanel1" runat="server">
    <ContentTemplate>

        <div id="testdiv"><%= sDataForROI1Graph %></div>
        <br />
        <asp:Button ID="Button1" runat="server" Text="Button" OnClick="Button1_Click"></asp:Button>
        <br />
        <script type="text/javascript">
            function testScript() {
                alert(document.getElementById("testdiv").innerHTML);
                var dataforROI1 = document.getElementById('<%= hidfieldforROI1.ClientID %>').value;
                alert(dataforROI1);
            }
        </script>

    </ContentTemplate>
</asp:UpdatePanel>

<asp:TextBox ID="hidfieldforROI1" runat="server" Text="textBoxje"></asp:TextBox>

然后在代码背后

Dim sDataForROI1Graph As String = DateTime.Now.ToString

Sub Page_Load(ByVal Sender As System.Object, ByVal e As System.EventArgs)
    hidfieldforROI1.Text = "Page Load"
End Sub

Protected Sub Button1_Click(ByVal sender As Object, ByVal e As EventArgs)
    sDataForROI1Graph = DateTime.Now.ToString

    ScriptManager.RegisterStartupScript(Page, Page.GetType, "testScript", "testScript();", true)
End Sub

如果我使用此代码,点击按钮后会更新sDataForROI1Graph并显示警告。

更新

我稍微修改了我的答案,以包含一个HiddenField(我的代码段中的TextBox,使可视化更容易)。 HiddenField在Page_load' and in Button1_Click . The one in Button1_Click will ofcourse not show up since the HiddenField is outside the UpdatePanel . But the properties are still available so you can still use hidfieldforROI1.ClientID inside the UpdatePanel`

中获取值