2009-07-08 5 views
0

Ich muss Folgendes in ASP.NET-Seite generieren. Was ist der beste und einfachste Weg das zu tun?Wie übergeben Sie benutzerdefinierten Wert an asp.net-Steuerelement auf Aspx-Seite?

Vereinfachtes Beispiel. Also zu benutzerdefinierten Eigenschaft muss ich übergeben Zeichenfolge, die Index (i) an die Eigenschaft des Steuerelements enthalten würde. Ich könnte es von Codebehind tun, aber es wäre einfacher und einfacher, wenn ich es in .aspx Datei behalten könnte.

<table> 
<% 
    for(var i = 0; i < 10; i++) 
{ 
%><tr> 
    <td> 
     <cc1:CustomControl runat="server" CustomProperty="SomeText[<% i %>]"/> 
    </td> 
</tr> 
<% } %> 
</table> 

Im Wesentlichen muss ich einen benutzerdefinierten, nicht vorgegebenen Wert an das Steuerelement asp.net übergeben.

Antwort

2

Dies wird wahrscheinlich nicht funktionieren, wie Sie es erwarten. Stattdessen einen Platzhalter wie folgt hinzufügen:

<table> 
    <asp:PlaceHolder id="RowPlaceHolder" runat="server" /> 
</table> 

Und dann hinter in Ihrem Code:

for (int i = 0;i<10;i++) 
{ 
    var tr = new HTMLTableRow(); 
    var td = new HTMLTableCell(); 
    var Custom = (CustomControl)LoadControl("MyControl.ascx"); 
    Custom.id="Custom" + i.ToString(); 
    Custom.CustomProperty = "SomeText[" + i.ToString() + "]"; 

    td.Controls.Add(Custom); 
    tr.Controls.Add(td); 
    RowPlaceHolder.Controls.Add(tr); 
} 

tiefer gehen, wenn die Zahl 10 wirklich hart codiert ist, werden Sie Dinge finden viel einfacher auf lange Sicht zu behandeln, wenn Sie einfach weitermachen und 10 Einträge für Ihr Steuerelement manuell in das aspx-Markup kopieren. Dynamische Steuerelemente in ASP.Net-Webforms sind voller Fallstricke und Fehler.

Wenn die Nummer von einer legitimen Datenquelle stammt, ist es wahrscheinlich besser, diese Datenquelle tatsächlich zu verwenden und sie an ein Datensteuerelement wie einen Repeater zu binden.

+0

+1 für das Aufzeigen der Fallstricke von dynamischen Steuerelementen. – NotMe

0
<%= i %> 

Sollte für Sie arbeiten.

+0

funktioniert nicht. Dies ist die Serversteuerung, die Zeichenfolge wird unverändert an die Eigenschaft übergeben, einschließlich aller Klammern. – Sumrak

0

Sie könnten mit einem Repeater rocken und die Container.ItemIndex verwenden,

<asp:Repeater ID="rpt" runat="server"> 
    <HeaderTemplate> 
     <table> 
    </HeaderTemplate> 
    <ItemTemplate> 
     <tr> 
      <td> 
       <cc1:CustomControl runat="server" CustomProperty="SomeText[<%# Container.ItemIndex %>]"/> 
      </td> 
     </tr> 
    </ItemTemplate> 
    <FooterTemplate> 
     </table> 
    </FooterTemplate> 
</asp:Repeater>