我知道这个问题有点老了,但我认为它可能会对某人有所帮助,因此发布我对这个问题的解决方案。
这个问题有2个部分:
- 防止一次选择多个单选按钮。
- 要知道在服务器端代码中单击了哪个单选按钮。
我在中继器中的单选按钮有类似的问题。我在这里找到了部分解决方案:
Simple fix for Radio Button controls in an ASP.NET Repeater using jQuery
请阅读以上文章以了解该问题。我参考了这篇文章,这是很好的帮助。如上所述,这个问题有两个部分,首先是防止一次选择多个单选按钮。其次,要知道在服务器端代码中单击了哪个单选按钮。上述文章中发布的解决方案仅适用于第一部分。但是,那里编写的代码以及那里发布的解决方案更新对我不起作用。所以我不得不对其进行一些修改以使其正常工作。这是我的解决方案。
我想用投票按钮创建投票。我的单选按钮 (ID) 的名称是 PollGroupValue,其中 Groupname 在转发器中设置为 PollGroup。记住 ASP.net 中的 Groupname 属性在生成的 html 中呈现为 name 属性。我的代码如下:
<script type="text/javascript">
/* Step-01: */
$(document).ready(function () {
/* Step-02: */
$("[name*='PollGroup']").each(function () {
$(this).attr('ci-name', $(this).attr('name'));
});
/* Step-03: */
$("[name*='PollGroup']").attr("name", $("[name*='PollGroup']").attr("name"));
$('#Poll1_BtnVote').click(function (e) {
/* Step - 04: */
if ($("[name*='PollGroup']").filter(':checked').length == 0) {
alert('Please select an option.');
e.preventDefault();
}
/* Step - 05: */
$("[name*='PollGroup']").each(function () {
$(this).attr('name', $(this).attr('ci-name'));
});
});
});
第 1 步:每当在中继器中使用单选按钮时,它的组名都会更改,因为 asp.net 会更改它以使其唯一。因此,每个单选按钮都有不同的组名(客户端生成的标记中的名称属性)。因此,用户可以同时选择所有选项。如后续注释所述,此问题已通过使用 jquery 代码解决。
第 2 步:此代码块创建一个名为 ci-name 的新客户属性,并将 name 属性的原始值复制到这个新的自定义属性中。这个过程对轮询中的每个单选按钮重复。这一步将在后面的步骤中帮助我们。
步骤 3:此代码块将 poll 中所有单选按钮的名称属性值设置为第一个单选按钮的名称属性值。此步骤可防止用户一次选择多个选项。
第 4 步:此代码在投票按钮单击事件的事件处理程序中,检查用户是否至少选中了一个选项。如果他没有,则会显示一条错误消息。
第 5 步:此代码在投票按钮单击事件的事件处理程序中,将所有单选按钮的名称属性值设置为其原始值。这是通过从自定义属性 ci-name 复制值来实现的。这允许 asp.net 服务器端代码知道实际单击了哪个按钮。