2012-01-26 41 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询问元素的大小。

如果这不是一个选项,您希望的下一个最好的事情是在第一次回发之后记录此服务器端(并且在每个回帖中观看它,因为如果用户重新调整其大小浏览器窗口)。

相关问题