使用UpdatePanels的多级UserControl

时间:2013-06-08 22:52:34

标签: asp.net user-controls updatepanel

因为我们将有一个庞大的团队工作在页面的各个部分等我决定将页面的许多部分分解为可重用的Usercontrols。

但是我遇到了一个控件的问题。

首先,让我告诉你发生了什么。您也可以在http://www.elycity.co.uk/Business/BusinessNew2.aspx?businessid=24

看到这一点

我们首先拥有布局页面:BusinessNew2.aspx

每个部分都有一个webcontrol但最后一部分。 CompanyInformation Section在其中有几个其他UserControl。

除联系人(businesscontact.ascx)

外,一切正常

单击该按钮后,Tabs.ascx将重置,并返回到Information.ascx选项卡。

BusinessContact.ascx

<%@ Control Language="VB" AutoEventWireup="false" CodeFile="BusinessContact.ascx.vb"     Inherits="BusinessListing.BusinessContact" %>
<asp:UpdatePanel ID="updMain" runat="server" >
<ContentTemplate>
<asp:Panel ID="pnlContactMain" runat="server" >
    <h3>Send <asp:literal ID="litCompanyName" runat="server" /> a message</h3>
    <div class="form-horizontal">
        <div class="control-group">
            <label class="control-label" for="inputName">Name</label>
            <div class="controls">
                <asp:textbox type="text" id="txtName" placeholder="Name" runat="server" />
            </div>
        </div>
        <div class="control-group">
            <label class="control-label" for="inputEmail">Email</label>
            <div class="controls">
                <asp:textbox id="txtEmail" placeholder="Email" runat="server" />
            </div>
        </div>
        <div class="control-group">
            <label class="control-label" for="inputPhone">Telephone No</label>
            <div class="controls">
                <asp:textbox id="txtPhone" placeholder="Telephone" runat="server" />
            </div>
        </div> 
        <div class="control-group">
            <label class="control-label" for="inputMessage">Message</label>
            <div class="controls">
                <asp:TextBox Height="40" TextMode="MultiLine" id="txtMessage" placeholder="Message" runat="server" />
            </div>
        </div>


        <div class="control-group">
            <label class="control-label" for="inputMessage"></label>
            <div class="controls">
                <asp:Button ID="btnSendMessage" runat="server" Text="Send Message" />
            </div>
        </div>


    </div>
    </asp:Panel>


    <asp:Panel ID="pnlContactSent" runat="server" Visible="false">
        <div class="hero-unit">
            <h2>Email has been sent</h2>
        </div>
    </asp:Panel>
</ContentTemplate>
</asp:UpdatePanel>

在测试时,代码隐藏:

Namespace BusinessListing
Partial Class BusinessContact
    Inherits System.Web.UI.UserControl

    Protected Sub btnSendMessage_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles btnSendMessage.Click
        pnlContactMain.Visible = False
        pnlContactSent.Visible = True
    End Sub
 End Class
End Namespace

所以我错过了什么。为什么这样做完全回发到父控制器,我该如何防止这种情况?

此致 标记

1 个答案:

答案 0 :(得分:1)

你没有提供tabs.ascx的代码,但我猜你没有定义哪些控件应该在更新面板中触发回发。

这意味着tabs.ascx中UpdatePanel中控件的所有回发都会导致面板更新,包括来自子UserControls的回发。

如果您使用:

<asp:UpdatePanel id="upanelInfo" runat="server" ... >
    <ContentTemplate>
        ...
    </ContentTemplate>
    <Triggers>
        <asp:AsyncPostBackTrigger ControlID="buttonXXX" EventName="Click" />
        ....
    </Triggers>
</asp:UpdatePanel>