2009-09-29 2 views
1

Можете ли вы иметь блоки кода в тегах сервера? Например, я хочу создать пользовательские поля id, используя блоки кода. (Я знаю, что есть другой способ сделать это с помощью повторителей, но в моей конкретной ситуации я хотел бы сделать это таким образом, если его можно нерелевантные причины.)ASP.NET кодовые блоки в тегах сервера

<% foreach(var reference in references) { %> 
... 
<asp:LinkButton runat="server" ID='lbUpdateEmail_<%=reference.ReferenceId%>' OnClick="lbUpdateEmail_Click" style="float:right;">Update Email</asp:LinkButton> 
... 
<% } %> 
+0

В чем причина генерации идентификатора таким образом? какой-нибудь конкретный пример того, почему вы хотели бы этого? – shahkalpesh

ответ

3

Нельзя использовать <%%> внутри серверных тегов.

Хотя ASP.NET кажется очень динамичным в своем поведении, вы должны помнить, что страницы на самом деле скомпилированы в .NET-классы.

В этом случае используемый вами тег LinkButton указывает, что вы хотите, чтобы ваш класс страницы содержал экземпляр LinkButton, а идентификатор дает вам имя свойства, которое вы будете использовать для доступа к нему во время разработки (когда вы редактирование вашего кода.)

Скажем, в вашем коде позади вы хотели отключить кнопку ссылки? Как бы вы на это ссылались, если идентификатор еще не определен?

Кроме того, помните, что «ID», который вы установили, не является идентификатором «id», который отображается в HTML - если это то, что вы искали.

3

Я рекомендую вам, чтобы добавить кнопку ссылки вместо кода программного кода:

foreach(var reference in references) 
{ 
    LinkButton newLinkButton = new LinkButton(); 
    newLinkButton.Text = "Update Email"; 
    newLinkButton.Click += new EventHandler(a_lbUpdateEmail_Click); 
    myPlaceHolder.Controls.Add(newLinkButton); 
} 
+0

+1 по какой-то причине это похоже на готовое мышление – sshow

1

Я считаю, что если вы включите режим совместимости с ASP 3.0 Classic, вы можете это сделать; что я бы рекомендовал изучить другой подход.

Смежные вопросы