带有AsyncPostback的UpdatePanel尝试在UpdatePanel外部更新控件
本文关键字:UpdatePanel 外部 更新 控件 AsyncPostback 带有 | 更新日期: 2023-09-27 18:00:23
我需要UpdatePanel
和asyncpostback
,但在我的情况下,似乎没有部分回发,而是完全回发。我是网络表单的新手,请检查代码:
<%@ 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
?这不是意味着发生了完全回发,或者我不理解异步回发吗?
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。
您还需要将自定义控件放在另一个更新面板中,或者放在与按钮相同的更新面板中才能看到部分更新。