按钮不适用于更新面板
Posted
技术标签:
【中文标题】按钮不适用于更新面板【英文标题】:Button is not working with Update Panel 【发布时间】:2013-05-15 23:06:53 【问题描述】:我在更新面板中放置了一个计时器和一个用于显示倒计时时间的标签。我已将下一个按钮用于在更新面板之外显示下一个问题。
我的问题是按钮单击不适用于更新面板。在不使用更新面板和计时器的情况下,它运行良好。我该如何解决这个问题?
我还尝试将整个工具放在更新面板中。这对我没有帮助。
这是我的代码:
<asp:UpdatePanel ID="UpdatePanel1" runat="server">
<ContentTemplate>
<table class="style1">
<tr>
<td class="style2">
<asp:Timer ID="Timer1" runat="server" Interval="1000" ontick="Timer1_Tick">
</asp:Timer>
<asp:Label ID="lblTimer" runat="server"></asp:Label>
</tr>
<tr>
<td style="margin-left: 40px" class="style3">
<asp:Label ID="lblQuestion" runat="server"></asp:Label>
</td>
</tr>
</table>
</ContentTemplate>
</asp:UpdatePanel>
<table>
<tr>
<td style="margin-left: 40px" class="style2">
<asp:RadioButtonList ID="rblOptions" runat="server">
</asp:RadioButtonList>
</td>
</tr>
<tr>
<td style="margin-left: 40px" class="style2">
<table class="style1">
<tr>
<td class="style2">
<asp:Button ID="btnNext" runat="server" onclick="btnNext_Click" Text="Next"
Width="75px" />
</td>
<td>
<asp:Button ID="btnFinish" runat="server" onclick="btnFinish_Click"
Text="Finish" Width="75px" />
</td>
</tr>
<tr>
<td class="style2">
</td>
<td>
<asp:Label ID="lblScore" runat="server">Score : </asp:Label>
</td>
</tr>
</table>
</td>
</tr>
</table>
<asp:UpdatePanel>
我添加了以下代码。
<Triggers>
<asp:AsyncPostBackTrigger ControlID="btnNext" EventName="Click"/>
</Triggers>
还是不行。你能帮帮我吗....
使用更新面板时,单选按钮的选择会自动清除。有什么帮助....?
谢谢……
【问题讨论】:
“不工作”是什么意思,它会导致任何回发吗? 您是否遇到任何异常或错误?? 您是否刚刚尝试将 AutoPostBack = "true" 添加到您的控制器“”? 由于计时器滴答事件,单选按钮的选择可能会被清除。尝试为时间滴答事件添加 AsyncPostBackTrigger 或将计时器保存在单独的更新面板中。 【参考方案1】:如果页面中有验证错误(包括隐藏错误es:模态对话框)。 事件点击不起作用。 托盘为按钮设置不同的验证组(es:validationGroup="xxx")
<asp:Button ID="btnFinish" validationGroup="none" runat="server" onclick="btnFinish_Click" Text="Finish" />
希望对您有所帮助。
【讨论】:
【参考方案2】:似乎是不匹配的标签。一旦正确并再次通过布局。不用AjaxToolkit库,用jquery导航插件运行,感觉会更好。
【讨论】:
【参考方案3】:您必须将按钮放在更新面板中才能正常工作
<asp:UpdatePanel ID="UpdatePanel1" runat="server">
<ContentTemplate>
<table class="style1">
<tr>
<td class="style2">
<asp:Timer ID="Timer1" runat="server" Interval="1000" ontick="Timer1_Tick">
</asp:Timer>
<asp:Label ID="lblTimer" runat="server"></asp:Label>
</tr>
<tr>
<td style="margin-left: 40px" class="style3">
<asp:Label ID="lblQuestion" runat="server"></asp:Label>
</td>
</tr>
</table>
<table>
<tr>
<td style="margin-left: 40px" class="style2">
<asp:RadioButtonList ID="rblOptions" runat="server">
</asp:RadioButtonList>
</td>
</tr>
<tr>
<td style="margin-left: 40px" class="style2">
<table class="style1">
<tr>
<td class="style2">
<asp:Button ID="btnNext" runat="server" onclick="btnNext_Click" Text="Next"
Width="75px" />
</td>
<td>
<asp:Button ID="btnFinish" runat="server" onclick="btnFinish_Click"
Text="Finish" Width="75px" />
</td>
</tr>
<tr>
<td class="style2">
</td>
<td>
<asp:Label ID="lblScore" runat="server">Score : </asp:Label>
</td>
</tr>
</table>
</td>
</tr>
</table>
</ContentTemplate>
</asp:UpdatePanel>
【讨论】:
【参考方案4】:您需要注册 NEXT 按钮来更新面板。要注册,您需要在 UpdatePanel 中使用 <asp:asyncpostbacktrigger xmlns:asp="#unknown">
即
<updatepanel>
<contenttemplate>
... body ......
</contenttemplate>
<triggers>
<asp:asyncpostbacktrigger controlid="btnNext" eventname="Click" />
</triggers>
<updatepanel></updatepanel></updatepanel>
【讨论】:
注册 NEXT 按钮以更新面板也可以帮助我解决我的问题。你有我的 +100。【参考方案5】:您的 UpdatePanel 格式不正确。标记中有一个额外的 asp:UpdatePanel 标签。
改用这个:
<asp:UpdatePanel ID="UpdatePanel1" runat="server">
<ContentTemplate>
<table class="style1">
<tr>
<td class="style2">
<asp:Timer ID="Timer1" runat="server" Interval="1000" ontick="Timer1_Tick">
</asp:Timer>
<asp:Label ID="lblTimer" runat="server"></asp:Label>
</td>
</tr>
<tr>
<td style="margin-left: 40px" class="style3">
<asp:Label ID="lblQuestion" runat="server"></asp:Label>
</td>
</tr>
</table>
<table>
<tr>
<td style="margin-left: 40px" class="style2">
<asp:RadioButtonList ID="rblOptions" runat="server">
</asp:RadioButtonList>
</td>
</tr>
<tr>
<td style="margin-left: 40px" class="style2">
<table class="style1">
<tr>
<td class="style2">
<asp:Button ID="btnNext" runat="server" onclick="btnNext_Click" Text="Next" Width="75px" />
</td>
<td>
<asp:Button ID="btnFinish" runat="server" onclick="btnFinish_Click" Text="Finish" Width="75px" />
</td>
</tr>
<tr>
<td class="style2">
</td>
<td>
<asp:Label ID="lblScore" runat="server">Score : </asp:Label>
</td>
</tr>
</table>
</td>
</tr>
</table>
</ContentTemplate>
<asp:UpdatePanel>
【讨论】:
【参考方案6】:添加
<Triggers>
<asp:PostBackTrigger ControlID="btnNext" />
</Triggers>
并将 Ajaxtoolkit 添加到您的项目中...然后在 之后提供以下链接
<%@ Register Assembly="AjaxControlToolkit" Namespace="AjaxControlToolkit" TagPrefix="asp" %>
在你的表单标签中添加以下代码。
<asp:ScriptManager ID="ScriptManager1" runat="server">
</asp:ScriptManager>
它会解决你的问题。
【讨论】:
【参考方案7】:如果您使用的是母版页,则将此代码添加到您的页面加载事件中
using AjaxControlToolkit;
ToolkitScriptManager objScriptManager = (ToolkitScriptManager)this.Master.FindControl("ScriptManager1");
objScriptManager.AsyncPostBackTimeout = 36000;
.......
【讨论】:
谢谢,我在页面加载事件中添加了using AjaxControlToolkit;
。以上是关于按钮不适用于更新面板的主要内容,如果未能解决你的问题,请参考以下文章