带有AsyncPostback的UpdatePanel尝试更新UpdatePanel

时间:2015-06-28 13:20:49

标签: c# asp.net webforms

我需要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它应该做什么&#34;没有&#34;进行测试还有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是带有属性&#34; Company&#34;的自定义控件。此属性没有添加ViewState(因此如果完成回发,则无法正确加载)。当我点击Test Button时,页面会失败,因为&#34; CompanyInformationView.Company&#34;没有设置(它没有设置,因为它无法从ViewState加载,我猜)。

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

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

3 个答案:

答案 0 :(得分:0)

PageLoad和所有其他事件都会在每个get \ postback上引发,无论它是异步还是完整, 在asyncpostback中,服务器呈现的响应仅包括updatepanel内的内容。

答案 1 :(得分:0)

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

之前

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

答案 2 :(得分:0)

Web表单中的异步回发仍然会在整个页面生命周期中进行,就好像它是传统的帖子一样。区别仅在于将在响应中发送的目标更新面板内的更新内容。所以在这种情况下,异步回发仍然会给你异常,除非你填写自定义控件,无论是获取/发布。

您还需要将自定义控件放在另一个更新面板中或与按钮位于同一更新面板中,以便看到部分更新发生。