带有AsyncPostback的UpdatePanel尝试在UpdatePanel外部更新控件

本文关键字:UpdatePanel 外部 更新 控件 AsyncPostback 带有 | 更新日期: 2023-09-27 18:00:23

我需要UpdatePanelasyncpostback,但在我的情况下,似乎没有部分回发,而是完全回发。我是网络表单的新手,请检查代码:

<%@ Register TagPrefix="Cust" TagName="CompanyInformationView" Src="~/CustomControls/CompanyInformationView.ascx" %>
<asp:Content ID="Content2" ContentPlaceHolderID="MainContent" runat="Server">
    <asp:UpdatePanel runat="server" ID="UpdatePanel1" ChildrenAsTriggers="true" UpdateMode="Conditional">
        <ContentTemplate>
            <asp:Button ID="Button1" runat="server" OnClick= "Button1_Click" Text="test" />
        </ContentTemplate>
        <Triggers>
            <asp:AsyncPostBackTrigger ControlID="Button1" EventName="Click" />
        </Triggers>
    </asp:UpdatePanel>
    <Cust:CompanyInformationView ID="CompanyInformationView" runat="server" />   
</asp:Content>

所以我有Test Button. OnClick,它应该对测试"什么都不做"。还有对web表单的自定义控制。以下是此表单的服务器端代码:

protected void Page_Load(object sender, EventArgs e)
{
    if (!IsPostBack)
    {
       // fill in custom control
       CompanyInfo c = GetInfo();
       CompanyInformationView.Company = c;
    }
}
protected void Button1_Click(object sender, EventArgs e)
{
    var i = 1;
}

CompanyInformationView是具有属性"Company"的自定义控件。没有为此属性添加ViewState(因此,如果完成回发,则无法正确加载该属性)。当我点击Test Button时,页面会失败,因为没有设置"CompanyInformationView.Company"(我想它没有设置,因为它无法从ViewState加载)。

相反,我认为它不应该这样工作。AsynPostback应该只处理UpdatePanel

为什么要重新加载custom control?这不是意味着发生了完全回发,或者我不理解异步回发吗?

带有AsyncPostback的UpdatePanel尝试在UpdatePanel外部更新控件

PageLoad和所有其他事件在每次get''postback时都会引发,无论它是异步的还是完整的,在异步回发中,服务器呈现的响应仅包括更新面板内的内容。

尝试放置<asp:ScriptManager ID="ScriptManager1" runat="server"></asp:ScriptManager>

之前

<asp:UpdatePanel runat="server" ID="UpdatePanel1" ChildrenAsTriggers="true" UpdateMode="Conditional">

web表单中的异步帖子仍然像传统帖子一样继续整个页面生命周期。区别仅在于将作为响应发送的目标更新面板内的更新内容。因此,在这种情况下,asyncpost-back仍然会给您异常,除非您填充自定义控件,无论是get/post。

您还需要将自定义控件放在另一个更新面板中,或者放在与按钮相同的更新面板中才能看到部分更新。