加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > asp.Net > 正文

asp.net – 通过链接按钮单击从一个用户控件到另一个用户控件

发布时间:2020-12-16 06:46:49 所属栏目:asp.Net 来源:网络整理
导读:我在同一页面上有两个用户控件.一个包含显示导航链接的ListView,当用户单击ListView中的buttonlink时,应更新第二个用户控件.我怎样才能做到这一点? 解决方法 UserControl A应该处理按钮单击并在UserControl中声明 raise a custom event 该页面处理此事件并
我在同一页面上有两个用户控件.一个包含显示导航链接的ListView,当用户单击ListView中的buttonlink时,应更新第二个用户控件.我怎样才能做到这一点?

解决方法

> UserControl A应该处理按钮单击并在UserControl中声明 raise a custom event
>该页面处理此事件并调用UserControl B的公共方法来更新其内容

您可以通过EventArgs将UserControl A中的必要信息传递到页面(或者将UserControl本身作为参数传递并使用它的公共属性).

然后页面通过方法参数将参数传递给UserControl B,或者在调用Update-Method之前更改它的公共属性.

> http://msdn.microsoft.com/en-us/library/fb3w5b53.aspx
> http://chiragrdarji.blogspot.com/2007/08/raise-event-from-user-control-to-main.html

以下是您请求的示例代码.
抱歉无意义的命名,但你没有告诉这是什么.您应该使用可读变量,属性,方法和事件名称.

使用ListView减少UserControl A:

<%@ Control Language="vb" AutoEventWireup="false" CodeBehind="UsercontrolA.ascx.vb" Inherits="WebApplication1.UserControlA" %>
<asp:ListView ID="ListView1" runat="server">
    <ItemTemplate>
        <asp:LinkButton ID="LinkButton1" 
        CommandName="LinkClick" 
        CommandArgument='<%#Eval("ID") %>' 
        runat="server" 
        Text='<%#Eval("Text") %>'></asp:LinkButton>
    </ItemTemplate>
</asp:ListView>

从代码隐藏中删除了ListView数据绑定,因为这无关紧要.重要的部分是处理ListView的ItemCommand并引发自定义事件:

Public Event LinkClicked(sender As UserControlA,id As Int32)

Private Sub LV_ItemCommand(sender As Object,e As ListViewCommandEventArgs) Handles ListView1.ItemCommand
    If e.CommandName = "LinkClick" Then
        Dim id = CType(e.CommandArgument,Int32)
        ' This is the best way for UC's to commmunicate with the page: '
        RaiseEvent LinkClicked(Me,id)
    End If
End Sub

简单的UserControl B只有一个Label(ascx):

<%@ Control Language="vb" AutoEventWireup="false" CodeBehind="UserControlB.ascx.vb" Inherits="WebApplication1.UserControlB" %>
<asp:Label ID="Label1" runat="server"></asp:Label>

使用代码隐藏中的Update-Method:

Public Sub Update(showID As Int32)
    Me.Label1.Text = String.Format("Link {0} clicked",showID.ToString)
End Sub

最后,这是Page(aspx)

<uc1:UsercontrolA ID="UC_A" runat="server" />
<br />
<uc2:UserControlB ID="UC_B" runat="server" />

它控制UserControls.它处理来自UserControl A的事件并调用UserControl B提供的Update-Method:

Private Sub LinkClicked(sender As UserControlA,id As Integer) Handles UC_A.LinkClicked
    Me.UC_B.Update(id)
End Sub

这种事件方法的优点是UserControls可以重复使用.您也可以在其他页面中使用UserControl A,即使它们不处理此事件也是如此.它是控制器的一部分,用于决定需要什么以及应该做什么.

UserControls作为规则不应该依赖于特定的控制器,否则它们是硬链接的而不是可重用的.这也是令人讨厌的错误的良好来源. UserControl可能是其他嵌套(用户)控件的控件,但不是页面本身的控件.

沟通摘要:

>页面 – > UserControl – >公共财产和方法> UserControl – >页面 – >活动> UserControl – > UserControl – > controller-UserControl采用页面角色(见上文)

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读