2010-10-20 82 views
4

如何确定某个动态创建的asp.net控件的宽度? 例如,我有这样的代码:在asp.net中获取动态创建控件的属性值

<asp:Content ID="Content2" ContentPlaceHolderID="ContentPlaceHolder1" runat="Server"> 
<encosia:HighslideManager ID="HighslideManager1" runat="server" FadeInOut="true" 
    OutlineType="RoundedWhite" ControlBar="false" /> 
<table style="width: 100%; padding-left: 15px; padding-right: 15px;"> 
    <tr> 
     <td valign="top" style="width: 50%; border-right: dotted 2px White;"> 
      <asp:literal id="litText" runat="server" mode="PassThrough"></asp:literal> 
     </td> 
     <td valign="top" style="width: 50%"> 
      <table style="width: 100%;" cellspacing="10"> 
       <tr> 
        <td valign="top" style="width: 50%;" id="imageTD" runat="server" oninit="imageTD_OnInit"> 
         <asp:literal id="litEmptyText" runat="server" mode="PassThrough"></asp:literal> 
         <asp:repeater id="Repeater1" runat="server"> 
          <ItemTemplate> 
           <center> 
            <encosia:HighslideImage ID="HighslideImage1" runat="server" Width="200px" 
              ImageUrl='<%# Eval("ImageURL", "images/images/{0}") %>' 
              FullImageURL='<%# Eval("ImageURL", "images/images/{0}") %>' 
              AlternateText='Image <%# Container.ItemIndex%>'/> 


            <asp:Label ID="imageDescriptionLabel" 
             runat="server" CssClass="longtext" 
             Text= '<%# CutImageDescText(String.Format("{0}",Eval("Description")),imageTD.Width) %>' /> 
           </center> 
          </ItemTemplate> 
          <SeparatorTemplate> 
           <%# ((Container.ItemIndex % 2) == 1) ? "</td></tr><tr><td valign=\"top\" style=\"width:50%;\">" : "</td><td valign=\"top\" style=\"width:50%;\">"%> 
          </SeparatorTemplate>  
         </asp:repeater> 
        </td> 
       </tr> 
      </table> 
     </td> 
    </tr> 
</table> 

我需要计算imageTD的宽度。 我试图计算其页面事件的宽度,但此属性也像其他样式属性是空的。 ((( 请帮帮我吧! 谢谢!

+0

试着看,也许你可以在JavaScript中得到它... – 2010-10-20 09:55:36

回答

0

所以我不是这么多的专家,所以这不是一个完整的答案......从我看到它不是一个动态创建控制,我敢打赌,你的意思是大小是动态的?因为它会根据里面的内容而变化?

我用JQuery写了一些代码,它获取td的宽度并为其设置一个隐藏值,然后从asp获取该隐藏字段的值.net。有可能有更好的方法发送价值从js到asp.net

还有一件事,由于回发,我认为,请尝试点击butto n两次。 (同样也许有人聪明能回答,为什么出现这种情况)

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="testing._Default" %> 
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml"> 
<head runat="server"> 
    <title>Untitled Page</title> 
    <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.3/jquery.min.js" type="text/javascript" /> 
</head> 
<body> 
    <form id="form1" runat="server"> 
    <asp:Button ID="Button1" runat="server" Text="Button" OnClick="click" /> 
    <asp:TextBox ID="TextBox1" runat="server"></asp:TextBox> 
    <asp:HiddenField ID="hid" runat="server" /> 
    </form> 
    <table> 
     <tr> 
      <td id="image2"> 
       <img src="http://i38.tinypic.com/2el8jfb.jpg" /> 
      </td> 
     </tr> 
    </table> 
    <script type="text/javascript"> 
$(document).ready(
function() { 
var w = $('#image2').width(); 
$("#hid").val(w); 
} 
); 
    </script> 
</body> 
</html> 

protected void click(object sender, EventArgs e) 
     { 
      TextBox1.Text = hid.Value; 
     } 

我想过要去所有服务器端,通过控制一个ID和RUNAT服务器,但是当我通过代码访问图像身后imageTD.Width .Value,它变成了0,也许有人可以弄清楚为什么这是...

真的希望能帮到你! =)

0

我相信你可以使用Repeater1.FindControl并找到你的控件,只要你有你的发件人e从行命令(也许你需要添加一个委托preInit让它触发)。你将不得不投它 这样的事情。

Image test =(Image)e.Item.FindControl(“youImageName”);

0

答案很简单:你不能在服务器端存档。

1

您可以通过如下因素做到这一点:

  1. 如果你想使用“TD”标签的服务器,您需要设置此表的表标签“RUNAT”到“服务器”,并设置ID
  2. 你还需要设置“服务器和ID” TR和TD标签
  3. 如果建立TD不为任何数据绑定控件,比如一个中继器,你可以很容易得到你的服务器端

从该控件的属性。 ASP X页例如

<table runat="server" id="tabl1"> 
    <tr runat="server" id="tr1"> 
    <td runat="server" id="td1"> 

    </td> 
    </tr> 
</table> 

.aspx.cs代码的exaple

protected void Page_Load(object sender, EventArgs e) 
{ 
    var h = td1.Width; 
} 
0

有没有办法知道一个控制的 “动态” 的宽度。您可以从控件获得的唯一宽度是您在宽度属性中设置的宽度。

考虑用像素单位而不是百分比来修复它,它有时会有很大的帮助。