0

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コントロールに渡す必要があります。

4

3 に答える 3

2

これはおそらくあなたが期待するようには機能しません。代わりに、次のようなプレースホルダーを追加します。

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

そして、背後にあるコードで:

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

さらに深く掘り下げてみると、数字の10が実際にハードコーディングされている場合は、先に進んでコントロール用の10個のエントリをaspxマークアップに手動でコピーすると、長期的にははるかに扱いやすくなります。ASP.Net Webフォームの動的コントロールには、落とし穴と落とし穴がたくさんあります。

番号が正当なデータソースからのものである場合は、実際にそのデータソースを使用して、リピーターなどのデータコントロールにバインドする方がよいでしょう。

于 2009-07-08T21:28:48.063 に答える
0
<%= i %>

あなたのために働くはずです。

于 2009-07-08T21:26:42.077 に答える
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>
于 2009-07-08T21:36:25.427 に答える