【问题标题】:Multiple levels of UserControls using UpdatePanels使用 UpdatePanel 的多级用户控件
【发布时间】:2013-06-08 22:52:34
【问题描述】:

因为我们将有一个庞大的团队来处理页面的各个部分等,所以我决定将页面的许多部分分解为可重用的用户控件。

但是,我在使用一个控件时遇到了问题。

首先,让我告诉你正在发生的事情。你也可以在http://www.elycity.co.uk/Business/BusinessNew2.aspx?businessid=24看到这个

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

每个部分都有一个 web 控件,但最后一个部分。 CompanyInformation 部分中还有其他几个用户控件。

除联系人 (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

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

问候 标记

【问题讨论】:

    标签: asp.net user-controls updatepanel


    【解决方案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>
    

    【讨论】:

    • 谢谢,我决定完全放弃这种方式。让我质疑 UpdatePanels 的真正用途是什么,如果你已经链接起来使用子面板。
    猜你喜欢
    • 2011-01-10
    • 1970-01-01
    • 1970-01-01
    • 2010-09-21
    • 2012-09-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多