我在同一页面上有两个用户控件。一个包含显示导航链接的ListView,当用户单击ListView中的buttonlink时,应更新第二个用户控件。我怎样才能做到这一点?通过链接按钮单击从一个用户控件到另一个
4
A
回答
6
- 用户控件A应处理按钮点击,并在用户控件
- 页面处理该事件,并调用用户控件B的公共方法来更新它的内容
你可以通过必要的声明raise a custom event来自UserControl A的信息通过EventArgs传递给页面(或者传递UserControl本身作为参数并使用它的公共属性)。
然后,页面在调用Update
-Method之前,通过方法参数或更改它的公共属性将参数传递给UserControl B.
- http://msdn.microsoft.com/en-us/library/fb3w5b53.aspx
- http://chiragrdarji.blogspot.com/2007/08/raise-event-from-user-control-to-main.html
这里是您所要求的示例代码。 对不起,没有意义的命名,但你没有告诉这是什么。您应该使用可读的变量,属性,方法和事件名称。
减少用户控件一个有一个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可能是其他嵌套(用户)控件的控制器,但不适用于页面本身。
通信摘要:
- 页 - >用户控件 - >公共属性和方法
- 用户控件 - >网页 - >事件
- 用户控件 - >用户控件 - >控制器-用户控件采用页面角色(见上)
相关问题
- 1. 禁用链接/按钮,直到单击另一个按钮
- 2. 通过按钮链接一个视图到另一个通过按钮
- 3. 通过点击一个按钮删除一个用户控件
- 4. 委派一个按钮单击事件通过点击另一个按钮
- 5. 通过按钮单击事件通过几个usercontrols到一个窗体,让另一个用户控件知道按钮点击
- 6. 通过点击一个按钮,通过点击另一buttonm
- 7. 通过点击一个按钮调用另外两个按钮
- 8. 如何通过单击按钮显示另一个按钮?
- 9. 单击菜单链接从一个div移动到另一个
- 10. 链接按钮到另一个viewcontroll(uiwebview)
- 11. 将变量从一个按钮单击传递到另一个
- 12. 通过从一个控件到另一个控件的索引
- 13. 从一个按钮中打开另一个JFrame单击事件
- 14. 将数据从一个按钮单击事件传递到另一个按钮单击事件
- 15. 如何将一个事件从一个按钮连接到另一个按钮?
- 16. Java - 通过一个按钮点击从一个类到主类
- 17. PyQt通过单击另一个按钮来显示一个窗口小部件
- 18. 通过点击提交按钮将值从一个jsp移动到另一个
- 19. 通过单击一个gwt按钮来伪造一个表单
- 20. 将数据绑定到中继器,通过另一个中继器中的用户控件单击按钮
- 21. 如何调用一个asp按钮控制另一个html(客户端)按钮控件的点击事件?
- 22. 当用户点击一个按钮时,通过另一个按钮更改自定义按钮
- 23. JQuery的/ JavaScript的 - 触发按钮从另一个按钮单击事件单击
- 24. 单击一个按钮,然后激活另一个按钮
- 25. 如何通过点击另一个按钮java执行按钮?
- 26. Android MediaPlayer无法通过单击另一个按钮
- 27. 触发asp:按钮的点击事件,通过点击另一个asp:按钮
- 28. 呼叫按钮单击事件从一个Web窗体到另一个
- 29. 单击一个按钮后是否可以避免控件验证,而不是单击另一个按钮后?
- 30. 呼叫按钮单击另一个按钮单击
是否有可能提供一些示例代码我真的很努力尝试这样做。谢谢。 – Aaron
@Aaron:添加样本:) –
非常感谢您的支持。不胜感激。 – Aaron