Как передать пользовательское значение в asp.net элемент управления на странице aspx?
-
11-09-2019 - |
Вопрос
Мне нужно сгенерировать следующее на странице ASP.NET.Какой самый лучший и простой способ сделать это?
Упрощенный пример.Итак, к пользовательскому свойству мне нужно передать строку, которая включала бы индекс (i) к свойству элемента управления.Я мог бы сделать это из codebehind, но было бы проще, если бы я мог сохранить это в файле .aspx.
<table>
<%
for( var i = 0; i < 10; i++ )
{
%><tr>
<td>
<cc1:CustomControl runat="server" CustomProperty="SomeText[<% i %>]"/>
</td>
</tr>
<% } %>
</table>
По сути, мне нужно передать пользовательское, а не предопределенное значение элементу управления asp.net.
Решение
Вероятно, это сработает не так, как вы ожидаете.Вместо этого добавьте заполнитель, подобный этому:
<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.Сетевые веб-формы изобилуют подводными камнями и подводными камнями.
Если число поступает из какого-то законного источника данных, то вам, вероятно, лучше на самом деле использовать этот источник данных и привязать его к элементу управления данными, такому как ретранслятор.
Другие советы
<%= i %>
Должно сработать на вас.
Вы могли бы потренироваться с помощью ретранслятора и использовать Контейнер.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>