2012-11-18 29 views
3

我正在嘗試將我的代碼集成到Google Chart API。我想從後面的代碼手動設置谷歌圖表標題和軸列名稱。我嘗試了下面的代碼,但不起作用。有什麼建議麼?javascript ASP.NET hiddenfield從代碼後面獲取值

ASPX文件

<asp:Content ID="HeaderContent" runat="server" ContentPlaceHolderID="HeadContent"> 
<script type="text/javascript" src="https://www.google.com/jsapi"></script> 
    <script type="text/javascript"> 
     google.load("visualization", "1", { "packages": ["corechart"] }); 
     function drawProgrammingChart() { 
      var data = new google.visualization.DataTable(operationdetails, 0.5); 
      var chart = new google.visualization.LineChart(document.getElementById("divprog")); 
      **var xAxis = document.getElementById("txtXAxisName");** 
      **console.log(xAxis);** 
      var yAxis = document.getElementById("txtYAxisName"); 
      chart.draw(data, { 
       title: "Visualization Satisfaction", hAxis: { title: "Programming method" }, vAxis: { title: "Units" } 
      }); 
     } 
     google.setOnLoadCallback(drawProgrammingChart); 
    </script> 
</asp:Content> 
<asp:Content ID="BodyContent" runat="server" ContentPlaceHolderID="MainContent"> 
    <div id="divprog" style="width: 750px; height: 350px;"> 
     </div> 
    <asp:HiddenField ID="txtXAxisName" runat="server" /> 
    <asp:HiddenField ID="txtYAxisName" runat="server" /> 
</asp:Content> 

在後面的代碼我想手動設置隱藏字段的值。

protected void Page_Load(object sender, EventArgs e) 
     { 
      if (!IsPostBack) 
      { 
       DataTable dt = generateDataTable(); 
       **txtXAxisName.Value = "Days";** 
       txtYAxisName.Value = "Duration"; 
       LoadChart(dt, "operationdetails");  
      } 

     } 
private void LoadChart(DataTable table, string jsName) 
     { 
      Page.ClientScript.RegisterStartupScript(
       this.GetType(), 
       jsName, string.Format("var {0} = {1};", jsName, new Bortosky.Google.Visualization.GoogleDataTable(table).GetJson()), true); 
     } 

當獲取元素txtAxisName時,它將得到空值。

回答

-1

作爲Cal279指示的,我查看呈現在頁面的源代碼和參見下文:

<input type="hidden" name="ctl00$MainContent$txtXAxisName" id="MainContent_txtXAxisName" value="Days" /> 

然後,我試圖下面和它的工作。由於Cal279 :)

var xAxis = document.getElementById("MainContent_txtXAxisName"); 
0

你可以嘗試以下方法:

var yAxis = document.getElementById('<%# txtYAxisName.ClientID %>'); 
+0

嘗試,但X軸仍然是空。 var xAxis = document.getElementById('<%#txtXAxisName.ClientID%>'); console.log(「XAxis:」+ xAxis); – NeoMatrix

+0

如果您查看呈現的頁面源,您是否可以看到客戶端ID正在吐出?如果不是,你看到了什麼? – CalC

+0

如果您在此答案中使用數據綁定語法(<%#...),則需要在代碼隱藏中調用Page.DataBind()。 – Joe

0

首先要得到你需要使用<%=txtYAxisName.ClientID%>控制的渲染ID,這個ID在你的代碼如下:

var xAxis = document.getElementById("<%=txtXAxisName.ClientID%>"); 

但要真正獲得它的價值,你需要使用.value屬性。

var xAxis = document.getElementById("<%=txtXAxisName.ClientID%>").value; 

但如果你實際上並不需要改變,在後幽冥採用背這個隱藏字段,你可以直接寫代碼:

<script type="text/javascript" src="https://www.google.com/jsapi"></script> 
    <script type="text/javascript"> 
     google.load("visualization", "1", { "packages": ["corechart"] }); 
     function drawProgrammingChart() { 
      var data = new google.visualization.DataTable(operationdetails, 0.5); 
      var chart = new google.visualization.LineChart(document.getElementById("divprog")); 
      var xAxis = <asp:Literal runat="server" id="txtXAxisName" EnableViewState="False" /> 
      var yAxis = <asp:Literal runat="server" id="txtYAxisName" EnableViewState="False" /> 
      chart.draw(data, { 
       title: "Visualization Satisfaction", hAxis: { title: "Programming method" }, vAxis: { title: "Units" } 
      }); 
     } 
     google.setOnLoadCallback(drawProgrammingChart); 
    </script> 
</asp:Content> 

,並在後面的代碼只是

txtXAxisName.Text = "\"Days\";"; 
txtYAxisName.Text = "\"Duration\";"; 

並且實際上直接在頁面上,在腳本內部渲染值。

0
var yAxis = document.getElementById('<%# txtYAxisName.ClientID %>'); 
+2

有點解釋會很好! – gsamaras

相關問題