我的Webforms应用程序包括一个用户控件,该控件使用一对单选按钮使用户能够选择“输入新任务”(这会导致显示一个文本框)或“或选择现有任务”(这会导致一个要显示的列表框。我使用jQuery来显示和隐藏文本框和列表框,并且这没有问题。
我的问题是单选按钮本身。尽管两个单选按钮具有相同的组名“ NewOrExisting”,但rdoNew始终保持选中状态,而rdoExisting处于未选中状态。我的问题当然是如何使这些单选按钮正常工作?
<%@ Control Language="VB" AutoEventWireup="false" CodeFile="Pop_Pretask.ascx.vb" Inherits="Pop_Pretask" %>
<a href="#" style="display:none;visibility:hidden;" onclick="javascript:return false" id="hidlinkAddPretask"
runat="server">dummy</a>
<cc1:ModalPopupExtender ID="mpePretask" runat="server" PopupControlID="pnlPretask" TargetControlID="hidlinkAddPretask"
CancelControlID="btnCancelPretask" PopupDragHandleControlID="lblDragHandlePretask"></cc1:ModalPopupExtender>
<asp:Panel ID="pnlPretask" runat="server" CssClass="popupPanel" Width="40%">
<asp:UpdatePanel ID="updPretask" runat="server" ChildrenAsTriggers="false" UpdateMode="Conditional">
<ContentTemplate>
<asp:BulletedList ID="blAllPretasks" runat="server">
</asp:BulletedList>
<asp:HiddenField runat="server" ID="hidPostTaskID" Visible="true" />
<asp:HiddenField runat="server" ID="hidGoalID" Visible="true" />
<h2 runat="server" ID="lblDragHandlePretask" Width="100%">
Before <b>"<asp:Label ID="lblAddPretask" runat="server"></asp:Label>"</b> can be completed, I must:
</h2>
**<asp:RadioButton ID="rdoNew" GroupName="NewOrExisting" runat="server" AutoPostBack="false"
Text="Enter a new task " onclick="fnNewPretask();return false;" Checked="true"
Enabled="true" />
<asp:RadioButton ID="rdoExisting" GroupName="NewOrExisting" runat="server" AutoPostBack="false"
Text="Or select an existing task." onclick="fnExistingPretask();return false;"
Checked="false" Enabled="true" />**
<asp:TextBox id="txtNewPretaskName" runat="server" width="100%" Visible="true"/>
<br />
<asp:ListBox ID="lboxPretask" runat="server" Width="100%" Height="200px"
AutoPostBack="false"
SelectionMode="Single"
Style="display:none"
>
</asp:ListBox>
</ContentTemplate>
<Triggers>
<asp:AsyncPostBackTrigger ControlID="btnAddAnotherPretask" EventName="Click" />
</Triggers>
</asp:UpdatePanel>
<asp:UpdateProgress ID="UpdateProgress4" runat="server" DisplayAfter="0">
<ProgressTemplate>
<img src="images/progress.gif" alt="" /> Updating...
</ProgressTemplate>
</asp:UpdateProgress>
<br />
<asp:Label runat="server" ID="lblErrPretask" Font-Bold="True" ForeColor="Red" />
<asp:Button ID="btnAddAnotherPretask" runat="server" Text="Save and Add Another" />
<asp:Button ID="btnSavePretask" runat="server" Text="Save" />
<asp:Button ID="btnCancelPretask" runat="server" Text="Cancel" OnClientClick="return false;" />
</asp:Panel>
<script type="text/javascript">
function fnNewPretask() {
//$("#<%=rdoExisting.ClientID%>").attr('checked', false);
//$("#<%=rdoNew.ClientID%>").attr('checked', true);
$("#<%=txtNewPretaskName.ClientID %>").show();
$("#<%=lboxPretask.ClientID %>").hide();
}
function fnExistingPretask() {
//$("#<%=rdoNew.ClientID%>").attr('checked', false);
//$("#<%=rdoExisting.ClientID%>").attr('checked', true);
$("#<%=txtNewPretaskName.ClientID%>").hide();
$("#<%=lboxPretask.ClientID %>").show();
}
</script>
如上面的代码所示,单选按钮位于ModalPopupForm内,后者又包含一个UpdatePanel(这是必需的,以便每次调用弹出式窗口时,列表框都可以在服务器上填充)。这些并发症可能导致单选按钮出现故障。
谢谢您的任何建议。
我从另一个来源得到了这个问题的答案。问题出在javascript“ return false;”。我将其添加到每个单选按钮的onclick末尾。我误以为应该总是加上“ return false”。以防止页面回发到服务器。我现在知道了。