如何在返回主视图的按钮点击时调用对应View内用户控件的方法?
问题描述
我开发了一个ASP.NET应用程序,页面中包含嵌套在MultiView控件中的多个View,每个View都配有一个TabContainer。在某一特定View内,有一个可将用户返回到主视图的LinkButton(ID为btnReturn),该View的TabPanel中嵌入了名为UserDetails的用户控件(ID为ucUserDetails)。
需求:点击btnReturn按钮返回主视图时,调用ucUserDetails用户控件中的公开方法resetHistory()(该方法内部会调用受保护的setEditOff()方法)。
相关代码
页面端代码
<asp:MultiView runat="server" ID="MV" ActiveViewIndex="0"> <asp:View runat="server" ID="view"> <asp:LinkButton ID="btnReturn" CssClass="returnBtnLink" Text="Return To Locations" runat="server" OnClick="btnReturn_Click"></asp:LinkButton> <cc1:TabContainer ID="tcUser" CssClass="Tab" runat="server" Width="100%" ActiveTabIndex="0" AutoPostBack="true" Style="width: 100vw; max-width: 58em; display: block; margin-left: auto; margin-right: auto; backface-visibility: hidden; background-color: transparent;"> <cc1:TabPanel ID="tpUser" runat="server"> <HeaderTemplate> <asp:Label ID="Label1" Text="User Info" Width="150px" runat="server"></asp:Label> </HeaderTemplate> <ContentTemplate> <uc1:UserDetails runat="server" ID="ucUserDetails" /> </ContentTemplate> </cc1:TabPanel> </cc1:TabContainer> </asp:View> </asp:MultiView>
用户控件内部受保护方法
protected void setEditOff() { // 自定义业务逻辑代码 }
用户控件公开调用方法
public void resetHistory() { setEditOff(); }
实现方案
在页面的btnReturn_Click事件处理方法中,直接调用用户控件的公开方法,再切换回主视图即可:
protected void btnReturn_Click(object sender, EventArgs e) { // 调用用户控件的公开方法 ucUserDetails.resetHistory(); // 切换回主视图(根据实际主视图索引调整数值) MV.ActiveViewIndex = 0; }
注意事项
- 必须确保用户控件的
resetHistory()方法是public访问修饰符,否则页面无法直接调用。 - 若出现控件找不到的情况(比如动态生成控件场景),可以通过逐层查找控件的方式获取用户控件实例:
var tabPanel = tcUser.FindControl("tpUser") as TabPanel; var userDetailsCtrl = tabPanel?.FindControl("ucUserDetails") as UserDetails; userDetailsCtrl?.resetHistory();
内容的提问来源于stack exchange,提问作者ghostfly
相关产品推荐
相关产品推荐

