2012-01-26 38 views
0

我有一個錨點設置爲顯示:內聯塊,它包裹文本緊如我想,沒有指定高度或寬度。現在我需要從我的代碼隱藏中獲得這個寬度和高度。在代碼中沒有指定錨高度和寬度的代碼後面?

有人可以向我解釋我怎樣才能得到這些值,即使他們沒有指定,只是從裏面的文本的寬度/高度繼承?

UPDATE:找到解決方案

這可以使用JavaScript屬性的offsetHeight和element.This的offsetWidth是代碼,我放在一起倉促完成:

JS:

<script language="javascript" type="text/javascript"> 
    function GetAnchorSize() { 
     var buttonWidth = document.getElementById('<%= button.ClientID %>').offsetWidth; 
     var buttonHeight = document.getElementById('<%= button.ClientID %>').offsetHeight; 
     document.getElementById('<%= buttonWidth.ClientID %>').value = buttonWidth; 
     document.getElementById('<%= buttonHeight.ClientID %>').value = buttonHeight; 
    } 
</script> 

元我需要的尺寸和兩個隱藏字段以輸入數值:

<input type="hidden" id="buttonWidth" runat="server" /> 
<input type="hidden" id="buttonHeight" runat="server" /> 

<a id="button" href="#" onmousemove="GetAnchorSize();" runat="server" 
        style="display: inline-block; border-color: Black; 
        text-decoration: none; border-style: solid; border-width: 1px; background-repeat:no-repeat;">Text</a> 

我將其設置爲在鼠標移動時得到更新,您可以將其設置爲您需要更新值的事件。

並獲得在代碼隱藏值:

int btnWidth = Convert.ToInt32(buttonWidth.Value); 
int btnHeight= Convert.ToInt32(buttonHeight.Value); 
+0

我想重申這是一個JavaScript問題。在頁面被瀏覽器呈現之前,高度和寬度都沒有最終確定。 –

+0

錨點位於「更新面板」中,因此它會根據用戶設置進行渲染。 – formatc

+0

如果您沒有明確強制大小,則只有在客戶端上呈現控件之後才能確定像素尺寸。除非您通過JavaScript從DOM檢索並將其發送回服務器,否則無法從服務器獲取該信息。 –

回答

0

如果我理解正確的話,你會想「RUNAT =服務器」添加到有問題的元素。另外,不要忘記給它分配一個ID。之後,你應該可以在C#中訪問它。

希望這會有所幫助!

+0

不,我不知道如何獲得元素(div,a)的高度和寬度,當高度和寬度沒有在Style標籤或css中指定時,元素用內部控件進行拉伸。 – formatc

+0

哦,我明白了。你可以使用像這樣的東西:element.Style.Add(「width」,「300px」); – dmarges

0

我認爲你應該只處理客戶端的表現問題,但如果你真的需要檢索這些值,我認爲你應該使用隱藏字段,並在PostBack上獲得它的價值。

確保您的元素(A,DIV等)是可見的,否則您可能會得到錯誤的值。

把值的隱藏字段中:

<input type="hidden" id="elSize" runat="server" /> 

然後檢索代碼隱藏的價值:

elSize.Value 

如果你使用jQuery,很容易以檢索大小:使用寬度()和height()(或者outerWidth和outerHeight,如果你想要margin/border/padding)。

使用普通的JavaScript,你應該能夠使用ClientWidth和ClientHeight我認爲。

編輯:把你隱藏的字段放在ContentTemplate標籤內。

<asp:UpdatePanel ID="upTripsGrid" runat="server" UpdateMode="Always"> 
    <ContentTemplate> 
     <input type="hidden" runat="server" id="hidCurrentDate" value="" /> 

來源:Problem - any hidden field in Update Panel does not get updated

+0

是的,我希望純粹的ASP.NET,因爲我不知道任何關於jQuery,我想可能Js offsetHeight/Width可能工作是這是正確的? – formatc

+0

是的,這取決於你只想要寬度還是邊距/填充/邊框。你沒有說它是一個UpdatePanel,你必須小心地把你的領域放在ContentTemplate標籤中。 – DarkRaven

0

這裏的問題是,由於該元件周圍的文字環繞緊,它的大小取決於文本的大小...以及文字的大小取決於大小和瀏覽器窗口的縮放。因此,元素的大小取決於瀏覽器窗口的大小,並且無法知道該項目在瀏覽器呈現之前會有多大。

這裏最好的解決方案是實現你在javascript中所做的任何事情,它可以很容易地向瀏覽器DOM詢問元素的大小。

如果這不是一個選項,您希望的下一個最好的事情是在第一次回發之後記錄此服務器端(並且在每個回帖中觀看它,因爲如果用戶重新調整其大小瀏覽器窗口)。

相關問題