2009-07-08 12 views
0

ASP.NETページで次のように生成する必要があります。それを行うには最高の、最も簡単な方法は何ですか?asp.netページのasp.netコントロールにカスタム値を渡す方法はありますか?

簡略化された例。だから、カスタムプロパティには、コントロールのプロパティにインデックス(i)を含む文字列を渡す必要があります。私はコードビハインドからそれを行うことができますが、もしそれを.aspxファイルに保存することができれば、より簡単で簡単になります。

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

私はasp.netコントロールにカスタム値を渡す必要があります。

答えて

2

これはおそらく期待通りに動作しません。

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

そして、背後にあるコードの中で:数10は本当にあなたが物事を見つけることができます、ハードコードされている場合ずっと

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); 
} 

、より深く行く代わりに、このようなプレースホルダを追加あなたが先に進み、手作業でaspxマークアップにあなたのコントロールのための10のエントリーをコピーするならば、長期的に対処する方が簡単です。 ASP.Net Webformsの動的コントロールには落とし穴や問題があります。

数字が正当なデータソースのものであれば、そのデータソースを実際に使用してリピータのようなデータコントロールにバインドするほうがよいでしょう。

+0

+1ダイナミックコントロールの落とし穴を指摘してください。 – NotMe

0
<%= i %> 

あなたに適しています。

+0

は動作しません使用することができます。これはサーバーコントロールです。文字列はそのまま大括弧を含めてプロパティに渡されます。 – Sumrak

0

あなたはリピーターで思い切りとContainer.ItemIndex、

<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>