ASP.NET: Как мне обработать событие click из элемента <a>в literal.text? - PullRequest
0 голосов
/ 09 февраля 2012

Я создаю <div> и добавляю их в текстовое свойство литерала. Я добавил элемент <a> в текст, чтобы пользователь мог щелкнуть конкретный элемент. Как я могу связать это с функцией для обработки события в codebehind (vb.net)?

Пример моего Literal.Text ...

    For Each row As DataRow In oDataTable.Rows
       MyLiteral.Text &= "<div style='font-size: 8.25px; text-transform:uppercase; padding:3px; background: #FF8C00; border: 1px solid #000; margin: 0 5px 0 5px; display:inline-block; float: left;'>" _
                         & row.Item("LastName") & " | <a href='#?"& row.Item("ID") & "' style='color: #000;' >X</a></div>"
    Next

Итак, приведенный выше код я хочу как-то разрешить пользователю щелкнуть ссылку X, а затем удалить этого человека.

Редактировать: Если есть лучший способ сделать это, было бы здорово услышать также! Благодаря.

Ответы [ 2 ]

2 голосов
/ 09 февраля 2012

Почему бы не переключиться на использование asp: Repeater control.Оттуда вы можете добавить asp: LinkButton в шаблон повторителя и перехватить запись обратно.Элемент управления Repeater был разработан для того же действия, что и ваш цикл, а именно для создания шаблона, который будет использоваться для сбора данных.Это позволит использовать элементы управления с runat = "server" для обработки событий обратной передачи.

Вот некоторые страницы, на которых обсуждается использование повторителя:

http://www.aspnettutorials.com/tutorials/controls/repeater-vb.aspx

http://www.dotnetcurry.com/ShowArticle.aspx?ID=663

Вы, вероятно, захотите использовать событие OnItemDataBound для обработки ваших элементов управления, которые являются runat = "server":

выборка значений из элемента управления-повторителя в событии ItemDataBound

http://www.codeguru.com/csharp/.net/net_asp/tutorials/article.php/c12065

И статьи о том, как обрабатывать событие обратной передачи при нажатии кнопки:

событие кнопки во вложенном повторителе

ASP.Net: почему события нажатия / команды моей кнопки не связываются / не запускаются в повторителе?

Мой VB.NET ржавый, но я был бы более чем рад помочь вамс любыми вопросами, которые могут у вас возникнуть.

РЕДАКТИРОВАТЬ - Добавление образца кода

Мой ретранслятор:

<asp:Repeater runat="server" ID="repTemplate">
    <ItemTemplate>
        <div>
           <%# DataBinder.Eval(Container.DataItem, "Key")%> - <%# DataBinder.Eval(Container.DataItem, "Value") %>
           <asp:LinkButton OnClick="RepeaterLinkButton1_Click" runat="server" ID="linkDelete" Text="X" CommandArgument='<%# DataBinder.Eval(Container.DataItem, "Key") %>' />
        </div>
    </ItemTemplate>
</asp:Repeater>

И код сзади на странице

Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load


    If IsPostBack = False Then

        Dim data As Dictionary(Of Integer, String) = New Dictionary(Of Integer, String)()

        data.Add(1, "Test #1")
        data.Add(2, "Test #2")
        data.Add(3, "Test #3")
        data.Add(4, "Test #4")
        data.Add(5, "Test #5")

        Me.repTemplate.DataSource = data
        Me.repTemplate.DataBind()

    End If

End Sub

Protected Sub RepeaterLinkButton1_Click(sender As Object, e As EventArgs)

    Dim linkButton As LinkButton = sender
    Dim id As String = linkButton.CommandArgument

    'TODO: Delete from the database based on ID
    'TODO: Reload the data to the repeater

End Sub

Установив функцию OnClick в представлении кода HTML и установив для CommandArgument значениеID вы можете захватить ID строки и делать то, что вы хотите.Имейте в виду, что мой пример использует Dictonary для данных в качестве примера, поэтому «Ключ» - это уникальный ключ элемента, а «Значение» - это то, что в нем хранится, и поэтому HTML использует «Ключ» /«Ценность» имен.

0 голосов
/ 09 февраля 2012

Вы можете использовать Гиперссылка control

HyperLink hl1 = new HyperLink();
hl1.Text="Click Here";
hl1.NavigateUrl="http://www.google.com";
...