2010-10-20 88 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

有沒有辦法知道一個控制的 「動態」 的寬度。您可以從控件獲得的唯一寬度是您在寬度屬性中設置的寬度。

考慮用像素單位而不是百分比來修復它,它有時會有很大的幫助。

相關問題