Aar*_*ron 4 vb.net asp.net user-controls
我在同一页面上有两个用户控件.一个包含显示导航链接的ListView,当用户单击ListView中的buttonlink时,应更新第二个用户控件.我怎样才能做到这一点?
您可以通过EventArgs将UserControl A中的必要信息传递到页面(或者将UserControl本身作为参数传递并使用它的公共属性).
然后页面通过方法参数将参数传递给UserControl B,或者在调用Update-Method 之前更改它的公共属性.
以下是您请求的示例代码.抱歉无意义的命名,但你没有告诉这是什么.您应该使用可读变量,属性,方法和事件名称.
使用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>
Run Code Online (Sandbox Code Playgroud)
从代码隐藏中删除了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
Run Code Online (Sandbox Code Playgroud)
简单的UserControl B只有一个Label(ascx):
<%@ Control Language="vb" AutoEventWireup="false" CodeBehind="UserControlB.ascx.vb" Inherits="WebApplication1.UserControlB" %>
<asp:Label ID="Label1" runat="server"></asp:Label>
Run Code Online (Sandbox Code Playgroud)
随着Update在代码隐藏-方法:
Public Sub Update(showID As Int32)
Me.Label1.Text = String.Format("Link {0} clicked", showID.ToString)
End Sub
Run Code Online (Sandbox Code Playgroud)
最后,这是Page(aspx)
<uc1:UsercontrolA ID="UC_A" runat="server" />
<br />
<uc2:UserControlB ID="UC_B" runat="server" />
Run Code Online (Sandbox Code Playgroud)
它控制UserControls.它处理来自UserControl A的事件并调用UpdateUserControl B提供的-Method:
Private Sub LinkClicked(sender As UserControlA, id As Integer) Handles UC_A.LinkClicked
Me.UC_B.Update(id)
End Sub
Run Code Online (Sandbox Code Playgroud)
这种事件方法的优点是UserControls可以重复使用.您也可以在其他页面中使用UserControl A,即使它们不处理此事件也是如此.它是控制器的一部分,用于决定需要什么以及应该做什么.
UserControls作为规则不应该依赖于特定的控制器,否则它们是硬链接的而不是可重用的.这也是令人讨厌的错误的良好来源.UserControl可能是其他嵌套(用户)控件的控件,但不是页面本身的控件.
沟通摘要:
| 归档时间: |
|
| 查看次数: |
2104 次 |
| 最近记录: |