2011-06-13 33 views
2

好吧,我知道你可以從一個asp.net控制獲取信息使用此代碼:操縱asp.net「RUNAT =‘服務器’」 HTML對象的JavaScript

var element = document.getElementById('<%=myControl.ClientID%>'); 

但是我不能操縱所述的HTML元素後,它抓住它在Javascript中。我需要做什麼來改變在JavaScript中設置爲runat =「server」的東西的屬性?

它只能通過服務器端的C#嗎?

爲了進一步說明,我有一個通過Javascript更改大小的div,並試圖讓它的innerhtml中存在的mschart改變它的高度/寬度。但是,它在服務器上運行會導致問題。

<div id="div0" style="background-color:Silver; position: absolute; top: 0px; left: 0px; width: 480px; height: 245px;"> 
      <asp:Chart ID="chart0" runat="server" Height="245px" Width="480px" 
        BackColor="220, 230, 242" BackGradientStyle="None" 
         BackSecondaryColor="220, 230, 242"> 
      <BorderSkin PageColor="220, 230, 242" /> 
      </asp:Chart> 
     </div> 

編輯:結束了處理圖表通過回傳與查詢字符串調整的,然後在初始化抓住這些值在JavaScript和調整大小的div那裏。

+0

您還可以更改所有的HTML屬性服務器端控制(控制與'RUNAT =「服務器」')的更多信息,因爲即使ASP.NET控件最終也呈現給html控件。 – 2011-06-13 18:08:31

回答

4

因爲元素有runat=server您只能修改代碼後面的屬性(服務器端)。但是,實際的客戶端屬性(如可見性)可以通過JavaScript更改。

4

這是有點不清楚你的意思。如果你的意思是,你想操縱服務器端的屬性,或者調用服務器端函數,那麼你不能通過JavaScript來做到這一點。您需要使用類似ajax或webmethods的東西。如果你的意思是你想修改它的客戶屬性,比如它是否可見,或者它包含了什麼數據,那麼你可以做到這一點。但是,您需要指定更多關於您想要做什麼的信息。

編輯:基於您的更新的信息有好消息和壞消息

。是的,您可以更改客戶端控件的大小,但這隻會拉伸圖像。 MSChart生成一個下載的圖像文件。拉伸會導致質量差。

如果拉伸不是選項,您將需要重新生成新的尺寸圖表。這將需要你使用某種Ajax,或者完全刷新頁面。

+0

,或者他可以生成大圖像並通過CSS調整大小,然後在需要時再次通過javascript調整大小。這樣質量會得到保留 – 2011-06-15 12:22:17

3

如果該控件轉換爲簡單的HTML元素,您應該能夠編輯「控件」的客戶端屬性。但是,有時服務器端屬性沒有客戶端模擬。

一個常見的事情要注意的是,如果控件沒有設置爲可見,那意味着它根本不會呈現在頁面上;如果是這種情況,那麼您無法通過JavaScript訪問它。

2

如果你試圖修改的是與和對象的高度沒有任何理由下不應該工作:

var element = document.getElementById('<%=myControl.ClientID%>'); 
element.style.height = divHeight; 

只要看看在生成的HTML,與該名稱的控制實際上是一個div或圖像(或者您可以重新調整大小的東西),您可以在其中設置寬度和高度。我不知道Chart控件呈現的是什麼。無論如何,請使用Firebug檢查頁面中的html元素,並查看javascript中所做的更改如何影響結果。

無論如何,請記住,您只能在javascript中設置客戶端屬性。這意味着你正在尋找一些div元素,而不是服務器端控件。知道服務器端控件確實呈現給html,你應該能夠以某種方式實現你想要的。

2

我的建議是使用jQuery編寫腳本。它將使用的是客戶端腳本代碼中的以下內容:

  1. 獲取您需要的高度的元素。
  2. 獲取要操作的元素。
  3. 從第1部分

變更數值元件高度如果你認爲這將是很長的路要走,你的新的jQuery,我可以幫你與它的一些代碼。

0

我試圖操縱jquery中包含runat="server"屬性的控件。我無法改變它。只要我刪除runat="server",我注意到jQuery的變化發生。

你可以測試一下自己:

<asp:Label ID="myLabel">hello, warlord!</asp:Label> 
<asp:Label ID="myLabel2" runat="server">hello, warlord!</asp:Label> 
<script type="text/javascript">$("#myLabel").css("border", "3px solid red");</script> 
<script type="text/javascript">$("#myLabel2").css("border", "3px solid red");</script> 
0

我有同樣的問題,當你的HTML控件(與RUNAT =「服務器」)是的ContentPlaceHolder內這通常發生。下面是我所做的:

我改變:

document.getElementById("mypopup").style.visibility = "visible"; 

到:

document.getElementById("ctl00_ContentPlaceHolder1_mypopup").style.visibility = "visible"; 

當您查看瀏覽器上的網頁源代碼,你會看到你的HTML控件真正有名字。

,你可以找到關於如何(通過JavaScript例如)實際使用正確的ClientID屬性here