gpt4 book ai didi

asp.net - 将链接按钮单击从一个用户控件传递到另一个用户控件

转载 作者:行者123 更新时间:2023-12-03 00:33:29 24 4
gpt4 key购买 nike

我在同一页面上有两个用户控件。第一个包含显示导航链接的 ListView,第二个用户控件应在用户单击 ListView 中的按钮链接时更新。我怎样才能做到这一点?

最佳答案

  1. UserControl A 应该处理按钮单击和 raise a custom event在用户控件中声明
  2. 页面处理此事件并调用 UserControl B 的公共(public)方法来更新其内容

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

页面然后通过方法参数或通过在调用 Update 方法之前更改其公共(public)属性将参数传递给 UserControl B。

<小时/>

这是您请求的示例代码。抱歉,我的命名毫无意义,但你还没有告诉我这到底是怎么回事。您应该使用可读的变量、属性、方法和事件名称。

使用 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 数据绑定(bind),因为这并不重要。重要的部分是处理 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,只有一个标签(ascx):

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

使用代码隐藏中的更新方法:

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

最后,这是页面(aspx)

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

它控制两个用户控件。它处理来自 UserControl A 的事件并调用 UserControl B 提供的 Update 方法:

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

此事件方法的优点是 UserControl 保持可重用性。即使其他页面不处理此事件,您也可以在其他页面中使用 UserControl A。它是 Controller 的一部分,负责决定需要什么以及应该做什么。

UserControls 通常不应该依赖于特定的 Controller ,否则它们是硬链接(hard link)的并且不可重用。这也是令人讨厌的错误的一个很好的来源。 UserControl 可能是其他嵌套(用户)控件的 Controller ,但不是页面本身的 Controller 。

沟通摘要:

  • 页面 -> UserControl -> 公共(public)属性和方法
  • 用户控件 -> 页面 -> 事件
  • UserControl -> UserControl -> Controller -UserControl 采用页面角色(见上文)

关于asp.net - 将链接按钮单击从一个用户控件传递到另一个用户控件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8913645/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com