我有两组asp:TextBox
和asp:Button
控件,其中一组在更新面板中,另一组在外部..
<asp:UpdatePanel runat="server">
<ContentTemplate>
<asp:Button Text="text" runat="server" ID="btn1"/>
<asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>
</ContentTemplate>
</asp:UpdatePanel>
<asp:Button Text="text" runat="server" ID="btn2"/>
<asp:TextBox ID="TextBox2" runat="server"></asp:TextBox>
代码隐藏
protected void Page_Load(object sender, EventArgs e)
{
TextBox1.Text = TextBox2.Text;
}
现在我的问题是,Updatepanel究竟是如何工作的?
实际上我认为,在btn1
点击时,只有UpdatePanel的内容会作为请求发送到服务器,而响应仅来自服务器到该更新面板。
因此,我在TextBox2中输入了一些文字并点击了btn1
..但令人惊讶的是TextBox1
文字已更改为TextBox2
的文字。
然后我想,整个页面将作为请求发送到服务器,响应仅发送到该updatePanel并相应更新。
现在,我在Google Chrome开发者工具中检查了两个请求(即,来自btn1
和btn2
的请求)..令我惊讶的是,Content-Length
请求..
如果更新面板外有更多控件,那么来自Content-Length
btn2
会更多
有人可以对此有所启发..
答案 0 :(得分:0)
好的..这里的事情是,即使页面中有UpdatePanel,当发生回发时,所有内容都会回发到服务器。这类似于没有UpdatePanel的普通页面。这就是你为UpdatePanel选择UpdateMode的原因......
UpdateMode =“始终”和 UpdateMode =“有条件”。
因为你没有在这里设置任何东西,所以默认情况下它总是,因为整个页面都回发了...
要在添加UpdatePanel后查看您要查找的更改,您需要将其设置为条件并将元素添加为AsynPostbackTriggers ...
<asp:UpdatePanel runat="server" UpdateMode="Conditional">
<Triggers>
<asp:AsyncPostBackTrigger ControlID="btn1" />
</Triggers>
<ContentTemplate>
<asp:Button Text="text" runat="server" ID="btn1"/>
<asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>
</ContentTemplate>
</asp:UpdatePanel>
<asp:Button Text="text" runat="server" ID="btn2"/>
<asp:TextBox ID="TextBox2" runat="server"></asp:TextBox>
现在,当您单击btn1时,只会回发UpdatePanel内的内容,并且可以在响应中看到。
如果单击btn2,则只会在响应中看到UpdatePanel外部的内容。