ASP.NET:如何处理来自<a> element within a literal.text?</a>的点击事件

时间:2012-02-09 17:06:04

标签: asp.net vb.net onclick literals

我正在创建<div>并将它们附加到文字的文本属性中。我在文本中添加了<a>元素,以便用户可以单击特定元素。如何将其绑定到函数来处理代码隐藏(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 个答案:

答案 0 :(得分:2)

为什么不切换到使用asp:Repeater控件。从那里你可以添加一个asp:LinkBut​​ton到转发器模板并捕获回发。 Repeater控件的设计与您在循环中执行的操作相同,即创建一个用于数据收集的模板。这将允许使用带有runat =“server”的控件来处理回发事件。

以下是一些讨论使用中继器的页面:

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

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

您可能希望使用OnItemDataBound事件来处理runat =“server”的控件:

fetching values from the repeater control in ItemDataBound event

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

关于如何处理按钮点击回发事件的文章:

button event in nested repeater

ASP.Net: why is my button's click/command events not binding/firing in a repeater?

我的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

通过在代码的HTML视图中设置OnClick函数并将CommandArgument设置为ID,您可以捕获行的ID并执行您想要的操作。请记住,我的示例使用Dictonary作为示例,因此“Key”是项目的唯一键,“Value”是存储在其中的内容,这就是为什么HTML使用“Key”/ “价值”的名字。

答案 1 :(得分:0)

您可以使用超链接控件

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