2016-10-24 4 views
0

Я хочу, чтобы добавить некоторые элементы управления asp.net LinkButton к буквальным на C# веб-формы приложения, как код ниже:Добавить asp.net LinkButton буквального с помощью C#

StringBuilder sb = new StringBuilder("<ul>"); 
sb.Append("<li>"); 
sb.AppendFormat("<asp:LinkButton runat='server' class='add-row' ID='BtnAdd' OnClick='BtnAdd_Click' CommandArgument='test'>{0}</asp:LinkButton>", "Text on the link"); 
sb.Append("</li></ul>"); 
this.Literal.Text = sb.ToString();` 

, а также я хочу стрелять событие щелчка и получить значение CommandArgument.

private void BtnAdd_Click(object sender, EventArgs e) 
{ 
    //get the value of CommandArgument 
} 

Я пробовал их, и кнопка ссылки добавлена ​​в литерал успешно. но LinkButton не конвертировать в <a> теге и я обнаружил, что с поджигатель, как это и не каких-либо не могли стрелять событий: enter image description here

Я хочу, чтобы сделать дерево с листьями как LinkButtons используя <ul><li> теги в целом. Было бы очень полезно, если бы кто-нибудь мог объяснить решение этой проблемы.

+0

стороны сервера управление не может быть добавлен в виде текста, или ребенок, буквального контроля. Независимо от того, что вы добавляете в Literal control, рассматривается как буквальная строка, поэтому он называется Literal. Вам нужно найти альтернативный способ сделать то, что вы хотите сделать – Andrei

ответ

1

Как было предложено Андреем, используя кнопки ссылки таким образом, не будет работать.

Я использовал аналогичное решение в прошлом, создав параметр запроса для каждого тега в литерале и перенаправляя либо на текущую страницу, либо на другую страницу и извлекая параметр запроса оттуда.

Я бы посоветовал вам сначала попробовать и посмотреть, нет ли другого способа добиться того, что вы пытаетесь сделать, поскольку буквальное решение заканчивается очень суматохами и тяжелым кодом.

1

Я думаю, что Repeater лучше подходит для вашей цели.

<ul> 
    <asp:Repeater ID="Repeater1" runat="server"> 
     <ItemTemplate> 
      <li><asp:LinkButton ID="BtnAdd" runat="server" CssClass="add-row" OnClick="BtnAdd_Click">Text on the link</asp:LinkButton></li> 
     </ItemTemplate> 
    </asp:Repeater> 
</ul> 

И если вы хотите использовать CommandArgument вам нужен OnCommand, не OnClick

<asp:LinkButton ID="BtnAdd" runat="server" CssClass="add-row" OnCommand="BtnAdd_Command" CommandArgument='<%# Eval("value") %>'> 

protected void BtnAdd_Command(object sender, CommandEventArgs e) 
{ 
    string commandArgument = e.CommandArgument.ToString(); 
} 
2

Правильный подход здесь через апи WebControl, а не из шаблона. Ваш подход может работать только для содержимого HTML. Что вам нужно сделать, так это обработать событие жизненного цикла страницы, например OnInit, получить ссылку на ваш контейнерный контроль (this.MyPanel) и динамически добавлять элементы в свойство child этого элемента управления (this.MyPanel.Children.Add (new ... .))

предложенный Repeater решения не подходят для источников данных древовидной структуры, работает в список, хотя ...

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