Asp.net 多个UpdatePanel和状态
我有一个用户控件,它有多个更新面板Asp.net 多个UpdatePanel和状态,asp.net,ajax,asp.net-ajax,updatepanel,user-controls,Asp.net,Ajax,Asp.net Ajax,Updatepanel,User Controls,我有一个用户控件,它有多个更新面板 在页面加载时,我将一个子用户控件动态加载到占位符上(我每次都这样做,不检查回发) 我希望能够维护用户在子用户控件中所做更改的状态。(子用户控件具有html控件以及asp.net控件和其他自定义控件) 每当单击导致回发的按钮a或B时,子用户控件将丢失状态。UpdatePanel的模式已设置为conditional 在OnPageLoad中 我将子控件加载到占位符a 这个子控件有另一个包含大量JS的用户控件。用户可能会在子控件中进行更改 当他们单击作为父控件
在页面加载时,我将一个子用户控件动态加载到占位符上(我每次都这样做,不检查回发) 我希望能够维护用户在子用户控件中所做更改的状态。(子用户控件具有html控件以及asp.net控件和其他自定义控件) 每当单击导致回发的按钮a或B时,子用户控件将丢失状态。UpdatePanel的模式已设置为conditional 在OnPageLoad中
<UpdatePanel1>
<UpdatePanelChild1>
<Button A>
<Button B>
</UpdatePanelChild1>
<UpdatePanelChild2>
<PlaceHolderA>
</UpdatePanelChild2>
您可以使用ScriptManager,在您的控件中的服务器上运行表单,而不是更新面板 这样你就不会有邮筒了 这里有一个很好的参考: 你好。 乔塞马。 大宗报价 //Asp.Net代码中的代码 在我的页面脚本中,我将针对我的Web服务执行Ajax,回调EndHelloWorld可以在不丢失状态的情况下执行任何操作 希望对你有帮助。。。 亲切的问候。
Josema.看起来您需要删除嵌套的UpdatePanel。在这样的结构中:
<ParentUpdatePanel>
<ChildUpdatePanel1 />
<ChildUpdatePanel2 />
</ParentUpdatePanel />
所有更新面板都将始终更新,即使子UpdatePanel设置为conditional,因为父面板实际上是正在更新的面板。因此,其中一个子系统中的回发事件将导致父系统更新
一般来说,使用那种类型的模式是不好的。。。如果需要一个UpdatePanel中的事件导致另一个UpdatePanel中的更新,则应执行以下操作:
<asp:UpdatePanel ID="up1" runat="server" UpdateMode="Conditional">
<ContentTemplate>
<asp:Button ID="buttonA" runat="server" />
<asp:Button ID="buttonB" runat="server" />
</ContentTemplate>
</asp:UpdatePanel>
<asp:UpdatePanel ID="up2" runat="server" UpdateMode="Conditional">
<ContentTemplate>
<asp:Placeholder ID="ph" runat="server" />
</ContentTemplate>
<Triggers>
<asp:AsyncPostBackTrigger ControlID="buttonB" EventName="Click" />
</Triggers>
</asp:UpdatePanel>
动态添加控件时,每次加载页面时都需要重新添加控件。我不得不解决类似的困难,我用两种方法来解决。当动态字段被添加到页面上时,我会在用户点击填充或自己添加之前向页面添加一个隐藏控件。通过创建此类占位符,系统可以正确处理viewstate,从而保留用户的更改。我听到您提到的第二个问题是,chich update panel更新可能存在问题。将它们设置为“有条件的”是很好的,但在您的代码背后,如果需要,您还可以在其他RPanel中触发更新。只是updatepanel#.update()
或者,您也可以将所有更新面板包装到另一个面板中,但我建议不要这样做,因为这会浪费资源。看起来您正在丢失动态添加的子控件的ViewState 这是因为您在页面生命周期中添加它太晚了:ViewState在page.Load事件之前加载 尝试在Page.Init中添加您的子控件
<ParentUpdatePanel>
<ChildUpdatePanel1 />
<ChildUpdatePanel2 />
</ParentUpdatePanel />
<asp:UpdatePanel ID="up1" runat="server" UpdateMode="Conditional">
<ContentTemplate>
<asp:Button ID="buttonA" runat="server" />
<asp:Button ID="buttonB" runat="server" />
</ContentTemplate>
</asp:UpdatePanel>
<asp:UpdatePanel ID="up2" runat="server" UpdateMode="Conditional">
<ContentTemplate>
<asp:Placeholder ID="ph" runat="server" />
</ContentTemplate>
<Triggers>
<asp:AsyncPostBackTrigger ControlID="buttonB" EventName="Click" />
</Triggers>
</asp:UpdatePanel>