如何在代码隐藏中添加链接

时间:2009-01-27 17:12:39

标签: asp.net

我需要根据填充的DataSet在代码隐藏中添加链接按钮。我怎么做?我是否创建了一个占位符?我可以添加无,一个或许多不同的链接按钮。我还需要让每个链接按钮调用代码隐藏中的方法。当我添加按钮时,如何连接它?

感谢您的帮助。

3 个答案:

答案 0 :(得分:3)

这是一种方式:

在前端

,您将拥有某种类型的数据转发器控件,例如GridView。

在所述数据绑定控件的ItemTemplate中,您将声明您的链接按钮:

<asp:linkButton CommandName='Foo' CommandArgument='<%# Eval("Bar") %>'>
<%# Eval("Text") %>
</asp:linkButton>

请注意,我正在为其分配一个命令名称,并将值绑定到按钮的CommandArugment中。这很重要。

然后,在服务器端,您将为数据转发器的Click事件连接一个事件。

检查Event Args类的命令名称&amp;根据单击的LinkBut​​ton确定您需要访问哪个函数的参数。

答案 1 :(得分:2)

由于您动态创建了链接按钮,因此您应在客户端创建面板或占位符,以便将链接附加到面板,以便了解它们的显示位置:

    <asp:PlaceHolder ID="Linkholder" Runat="server"></asp:PlaceHolder> 

并在您的代码中

   Private Sub Page_Load(ByVal sender As System.Object, ByVal e As
   System.EventArgs) Handles MyBase.Load

     For i = 0 To 2 //this is for you iterate how many links you need to add base on your dataset you referred to
       Dim ctrl As New LinkButton
  //and since it is based on the Database you need to give them unique ids if you want to know which one was clicked based on the data info like so
       ctrl.ID = ""+DB.id  //id is suppose to be a "column"field from 
       your database
       ctrl.Text = DB.id+"create"
       ctrl.CommandArgument = "myargument"
       ctrl.CommandName = "mycommandname"
       AddHandler ctrl.Click, AddressOf link_button_click
       Linkholder.Controls.Add(ctrl)
     Next

  End Sub

   Sub link_button_click(ByVal sender As Object, ByVal e As System.EventArgs)
   Dim lb As Linkbutton = CType(sender, LinkButton)

   displayObjects(lb.CommandArgument)­ ­ 
   End Sub

但如果不是动态的那么你如何在客户端添加链接按钮,但将其设置为false,这样你也可以在控件中点击你希望他们去哪种方法的属性以及基于你的代码。你想要使链接出现在你的回发中会发生什么。当这种情况发生时,将属性设置为true:

 <asp:linkbutton id="link1" runat="server" onclick="link1method" visible="false"/>

中的代码

 public Page_Load(object sender, EventArgs e)
{


   if(//is dataset whatever it is suppose to be for link to show)
   {
       link1.visible=true;
   }

}

public link1method(object sender, EventArgs e)
{


  //for link1 method onclick

}

答案 2 :(得分:1)

您需要在RowDataBound事件中为您要绑定的给定GridView编写一些代码。在该方法中,您可以使用一些简单的代码动态添加任意数量的控件。此外,您可以利用CommandName和CommandArgument属性轻松进行单击处理。

您的RowDataBound事件中将包含以下代码。

If e.Row.RowType = DataControlRowType.DataRow Then

   Dim SpecialLink As New LinkButton()

   SpecialLink.CommandName = "FancyCommand"
   SpecialLink.CommandArgument = e.Row.RowIndex.ToString ''//Or your Unique Data Id too.
   SpecialLink.Text = "Click me to do custom work."
   e.Row.Cells(0).Controls.Add(SpecialLink) ''//Put it in whatever grid cell you'd like

End If

然后,您可以使用RowCommand事件轻松处理命令。

Private Sub ProcessGridCommand(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewCommandEventArgs) _
           Handles gvComments.RowCommand

   Select Case e.CommandName

         Case "FancyCommand"

            DoSpecialProcessing(e.CommandArgument)

   End Select

End Sub

我喜欢使用Select,因为它可以让以后轻松添加更多自定义命令。如果需要,您可以轻松地为C#重做此代码。

此外,如果您需要添加多个链接按钮,您可以在代码中快速完成,而无需将一堆占位符链接设置为可见或隐藏。

编辑:所以经过快速挖掘,如果你想调用你的JavaScript代码,然后抛弃上面的CommandName / Command Arguments,你可以执行以下操作:

SpecialLink.Attributes("OnClick") = "lnkDocumentOne_Click();"

您可能需要创建一个“catch all”类型的JavaScript方法来处理将调用它的各种链接,或者您也可以使用Page.RegisterClientScript方法注册所有JavaScript方法并动态创建它们。

相关问题