2015-04-22 2 views
0

На моей странице ASP.NET я использую диаграммы Google Визуализации внутри asp: UpdatePanel. Пользователь выбирает диаграмму, которую они хотят видеть, из двух asp: DropDownLists, а затем мой код C# генерирует JavaScript, а затем я вызываю ScriptManager.RegisterStartipScript (...). Когда первая страница загружает первую диаграмму по умолчанию (т. Е. Первый вызов RegisterStartupScript), и я могу просмотреть javascript из View Source. Только на обратной стороне я получаю пустой график, и когда я перехожу к View Source, страница не получила новый JavaScript, и у нее по-прежнему есть старый JavaScript по умолчанию из первой загрузки страницы. Вот странное поведение. Если я использую тот же самый код, но заменяю свой код диаграммы Google предупреждением (...); то alert() срабатывает каждый раз, и когда я просматриваю источник, там присутствует скрипт. Я пробовал разные вещи, а также ответил так: here. Ниже мой код, и любая помощь будет оценена по достоинству, у меня были другие взгляды на это, и мы все в тупике. FYI: Если я удалю все UpdatePanels и связанные с ним элементы (ScriptManager и UpdateProgress) и воспользуюсь ClientScript.RegisterStartupScript(), тогда все будет хорошо, и я получу новый код JavaScript на своей странице, и новая диаграмма появится так, как должна.RegisterStartupScript не работает с диаграммами UpdatePanel и Google Visualization

<asp:ScriptManager ID="ScriptMgr" runat="server" /> 

<asp:UpdatePanel ID="UpdatePanelData" runat="server"> 
    <ContentTemplate> 
     <p> 
      <asp:DropDownList ID="PlotList" runat="server" AutoPostBack="true" Width="500px" 
       onselectedindexchanged="PlotList_SelectedIndexChanged"></asp:DropDownList> 
      <asp:DropDownList ID="RangeList" runat="server" Width="125px" 
       style="float:right;" AutoPostBack="True" 
       onselectedindexchanged="RangeList_SelectedIndexChanged"> 
      </asp:DropDownList> 
      <br /> 
      <asp:Label ID="PlotDescription" runat="server" Width="100%"></asp:Label> 
     </p> 
     <div id="chart_material" class="GoogleChart" style="width:100%;height:450px;"></div> 
    </ContentTemplate> 
    <Triggers> 
     <asp:AsyncPostBackTrigger ControlID="RangeList" EventName="SelectedIndexChanged" /> 
     <asp:AsyncPostBackTrigger ControlID="PlotList" EventName="SelectedIndexChanged" /> 
    </Triggers> 
</asp:UpdatePanel> 

<asp:UpdateProgress ID="UpdateProgressData" runat="server" DisplayAfter="500"> 
    <ProgressTemplate> 
     <div class="LoadingPanel"> 
      <asp:Image ID="LoadingImage" runat="server" ImageUrl="~/Images/loading_2.gif" AlternateText="Loading ..." ToolTip="Loading ..." style="padding: 10px;position:fixed;top:45%;left:50%;" /> 
     </div> 
    </ProgressTemplate> 
</asp:UpdateProgress> 

И мой код на C# выглядит так. Функция DisplayPlot вызывается из двух событий DropDownList, и каждый список проходит сам по себе как «контроль».

private void DisplayPlot(Control control) 
    { 
     PlotInformation Plot = new PlotInformation(ChartDivID); 

     double Range = Convert.ToDouble(RangeList.SelectedValue); 

     string JavaScript = Plot.GetPlotScript(PlotList.SelectedItem.Text, Range); 

     PlotDescription.Text = Plot.GetDataPlotDescription(PlotList.SelectedItem.Text); 

     //string TestScript = "<script type=\"text/javascript\">\n\talert('" + PlotList.SelectedItem.Text + "');\n</script>"; 

     ScriptManager.RegisterStartupScript(control, control.GetType(), ScriptKey, JavaScript, false); 
     //ScriptManager.RegisterStartupScript(control, this.GetType(), ScriptKey, JavaScript, false); 

     //if (!ClientScript.IsStartupScriptRegistered(ScriptKey)) 
     // ClientScript.RegisterStartupScript(this.GetType(), ScriptKey, JavaScript); 
    } 

ответ

0

Я знаю, что это уже поздно, но я потратил много времени на ту же ошибку.

Try изменения:

ScriptManager.RegisterStartupScript(control, control.GetType(), ScriptKey, 
    JavaScript, false); 

Для

ScriptManager.RegisterStartupScript(UpdatePanelData, UpdatePanelData.GetType(), ScriptKey, 
    JavaScript, false); 
+0

Это было так давно, что я полностью переписал свой код. Я подумал, что на заднем плане была проблема с тайм-аутом. К сожалению, я больше не могу тестировать ваше решение. – user2205930