2012-01-18 172 views

回答

6
  1. 用户控件A应处理按钮点击,并在用户控件
  2. 页面处理该事件,并调用用户控件B的公共方法来更新它的内容

你可以通过必要的声明raise a custom event来自UserControl A的信息通过EventArgs传递给页面(或者传递UserControl本身作为参数并使用它的公共属性)。

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


这里是您所要求的示例代码。 对不起,没有意义的命名,但你没有告诉这是什么。您应该使用可读的变量,属性,方法和事件名称。

减少用户控件一个有一个ListView:

<%@ 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,提高自定义事件:在代码隐藏

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

随着Update - 方法:无非就是一个标签(ASCX)

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 

简单用户控件乙

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

最后,这里是(CSS)

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

它控制两个用户控件。它可以处理来自用户控件一个事件,并调用Update - 方法是用户控件B提供:

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

利用这一事件的方法的是用户控件保持被重用。您也可以在其他页面中使用UserControl A,即使它们不处理此事件。它是控制器的一部分,用于决定需要什么以及应该做什么。

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

通信摘要

  • 页 - >用户控件 - >公共属性和方法
  • 用户控件 - >网页 - >事件
  • 用户控件 - >用户控件 - >控制器-用户控件采用页面角色(见上)
+0

是否有可能提供一些示例代码我真的很努力尝试这样做。谢谢。 – Aaron

+0

@Aaron:添加样本:) –

+0

非常感谢您的支持。不胜感激。 – Aaron

相关问题