Mak*_*yNZ 6 javascript asp.net ajax updatepanel
asp.net SciptManager控件生成的JavaScript似乎有一个错误,无法处理隐藏的UpdatePanels.当一个更新的面板中的控件尝试使另一个更新面板可见时,将引发JavaScript错误.
这是ASP.Net AJAX的错误吗?有没有人有任何想法如何解决这个问题?
这是我正在尝试做的一个例子
<script type="text/C#" runat="server">
protected void LinkButton1_Click(object sender, EventArgs e)
{
Panel1.Visible = true;
}
</script>
<asp:ScriptManager ID="ScriptManager1" runat="server">
</asp:ScriptManager>
<asp:UpdatePanel ID="UpdatePanel1" runat="server">
<ContentTemplate>
<asp:LinkButton ID="LinkButton1" runat="server" OnClick="LinkButton1_Click" Text="Show Panel"></asp:LinkButton>
</ContentTemplate>
</asp:UpdatePanel>
<asp:Panel ID="Panel1" runat="server" Visible="false">
<asp:UpdatePanel ID="UpdatePanel2" runat="server">
<ContentTemplate>
blah bla blah
</ContentTemplate>
</asp:UpdatePanel>
</asp:Panel>
Run Code Online (Sandbox Code Playgroud)
这是单击"LinkButton1"链接时抛出的JavaScript错误.此错误来自asp.net ScriptManager控件生成的JavaScript
Error: Sys.InvalidOperationException: Could not find UpdatePanel with ID 'ctl00_ContentPlaceHolder1_UpdatePanel2'
Run Code Online (Sandbox Code Playgroud)
您遇到了问题,因为首次呈现页面时不会呈现 Panel1 的内容。这会导致 UpdatePanel2 未正确初始化。
(管理所有部分更新的页面请求管理器需要知道 UpdatePanel2 的存在,如果不渲染它就不会发生这种情况。另外,如果你考虑一下,更新面板需要渲染一些元素,如果仅添加一个占位符 div,它将在部分回发时注入其内容)。
我不确切知道您想要实现什么,但是,如果您只是希望 UpdatePanel2 由本身不在更新面板内的控件触发,则将 LinkButton1 设置为触发器,如下所示。
<script runat="server">
protected void LinkButton1_Click(object sender, EventArgs e)
{
blabla.Visible = true;
}
</script>
<asp:ScriptManager ID="ScriptManager1" runat="server" ScriptMode="Debug">
</asp:ScriptManager>
<asp:LinkButton ID="LinkButton1" runat="server" OnClick="LinkButton1_Click" Text="Show Panel"></asp:LinkButton>
<asp:UpdatePanel ID="UpdatePanel2" runat="server" >
<Triggers>
<asp:AsyncPostBackTrigger ControlID="LinkButton1" />
</Triggers>
<ContentTemplate>
<asp:PlaceHolder runat="server" ID="blabla" Visible="false">
blah bla blah
</asp:PlaceHolder>
</ContentTemplate>
</asp:UpdatePanel>
Run Code Online (Sandbox Code Playgroud)
如果 LinkButton1 确实必须位于更新面板内(也许 LinkButton1 并不总是可见?),那么您可以执行以下操作
<script runat="server">
protected void LinkButton1_Click(object sender, EventArgs e)
{
blabla.Visible = true;
UpdatePanel2.Update();
}
</script>
<asp:ScriptManager ID="ScriptManager1" runat="server" ScriptMode="Debug">
</asp:ScriptManager>
<asp:UpdatePanel ID="UpdatePanel1" runat="server" UpdateMode="Conditional" >
<ContentTemplate>
<asp:LinkButton ID="LinkButton1" runat="server" OnClick="LinkButton1_Click" Text="Show Panel"></asp:LinkButton>
</ContentTemplate>
</asp:UpdatePanel>
<asp:UpdatePanel ID="UpdatePanel2" runat="server" UpdateMode="Conditional" >
<Triggers>
<asp:AsyncPostBackTrigger ControlID="LinkButton1" />
</Triggers>
<ContentTemplate>
<asp:PlaceHolder runat="server" ID="blabla" Visible="false">
blah bla blah
</asp:PlaceHolder>
</ContentTemplate>
</asp:UpdatePanel>
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3830 次 |
| 最近记录: |