【问题标题】:UpdatePanel with AsyncPostback tryes to update control outside UpdatePanel带有异步回发的 UpdatePanel 尝试更新 UpdatePanel 外部的控件
【发布时间】:2015-06-29 05:25:02
【问题描述】:

我需要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?这是否意味着发生了 Full postback 或者我不理解 Asyncpostback?

【问题讨论】:

    标签: c# asp.net webforms


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

      尝试把&lt;asp:ScriptManager ID="ScriptManager1" runat="server"&gt;&lt;/asp:ScriptManager&gt;

      之前

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

      【讨论】:

      • 但是我已经有一个脚本管理器在上面的某个地方。
      【解决方案3】:

      Web 表单中的异步回帖仍会继续整个页面生命周期,就像它是传统帖子一样。不同之处仅在于将作为响应发送的目标更新面板内的更新内容。所以在这种情况下,异步回发仍然会给你异常,除非你填充自定义控件,无论 get/post。

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2010-10-04
        • 1970-01-01
        • 1970-01-01
        • 2011-09-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多