2互斥的RadioButton“列表”

时间:2009-03-25 07:53:43

标签: asp.net

我认为这必须是我在网络表单中做过的最令人沮丧的事情。然而人们会认为这将是世界上最容易做到的事情。就是这样:

我的.aspx页面上需要2个单独的单选按钮列表。一组允许客户选择一个选项。另一组也是为了不同的目的。但只有一组可以选择一个无线电按钮。

好的我已经尝试在同一页面上使用2个asp.net Radiobuttonlists控件。使用GroupName解决了令人讨厌的错误(asp.net分配了控件的uniqueID,它阻止了groupname的工作,因为现在,2个radiobuttonlists不能为所有的radiobutton提供相同的groupname,因为每个radiobuttonlist都有不同的uniqueID,因此bug分配了呈现按钮时,唯一ID作为name属性。因为名称集不同,所以它们不是互斥的。无论如何,所以我创建了自定义RadioButtonListcontrol并修复了该组名问题。

但是当最终发生的时候,我在我的.aspx页面上放置了我的新自定义radiobuttonlist控件的2个实例,所有都是膨胀,直到我注意到每次检查radiobuttonlist1.SelectedValue或radiobuttonlist2.SelectedValue(没有我正在检查的事情)值总是吐回string.empty而我无法找出原因(见http://forums.asp.net/t/1401117.aspx)。

今晚第三次尝试并进入黎明(没有睡眠)。我试图完全废弃尝试使用2个自定义radiobuttonlists因为string.empty问题并试图通过使用2个asp.net转发器和标准输入HTML标签吐出2套radiobuttonlists。有那个工作。好的但是2个列表仍然不是互斥的。我可以在repeater1的第一组radiobuttons中选择一个值,同样也可以用于repeater2。我不能为我的生活得到“套装”是相互排斥的无线电按钮组。

4 个答案:

答案 0 :(得分:4)

由于您有两组单选按钮,您想要作为一组单选按钮使用,解决方案很简单:将其设为一组单选按钮。

您遇到的唯一问题是,您获得的值与两个列表中的名称相同,但可以通过在值中添加前缀来解决,以便您可以轻松识别选项所在的列表。

答案 1 :(得分:2)

更新:根据发布的新信息作为答案。我在原始答案中提出的选项对应于3.您必须考虑以下内容:

  • Html单选按钮只有1个 内置机制来处理 排他性,这就是名称。
  • 您明确要求一个no js解决方案,所以鉴于上述情况,您必须操纵ID来实现它。如果你没有阻止这个选项,我相信有人会想出一些已经支持它的好的jquery或js库。
  • 选项3显然是侵入性较小的,因为您不会被迫影响实际数据,也不会受到未来更新的影响。

这不是那么多代码,只是列表索引上的额外内容,以及一些简单的事情:

int? list1Value = null;
int? list2Value = null;
var value = Request.Form["somegroup"];
if (value.StartsWith("List1"))
    list1Value = int.Parse(value.Substring(5));
else
    list2Value = int.Parse(value.Substring(5));//Assuming List2 as prefix

原件:

我看到了你的另一个问题,你只需要使用相同的组名。确保所有项目的值都不同,无论它们来自哪个列表。实现此目的的一种方法是在值中添加一些内容,例如:<%#“List1-”+ Eval(“ID”)%>并修改读取Request.Form [“yourgroupname”]的代码。

答案 2 :(得分:0)

我认为你应该只使用RadioButtons而不是RadioButtonLists。

Here's an article提供了解决radiobutton命名错误的解决方案。

答案 3 :(得分:0)

虽然这篇文章已于1年前发布,但我只是阅读它,因为我面临同样的问题。

目前我有一个使用jQuery的解决方案:

客户端脚本(您还必须包含jQuery)

        function SetRadio(rb) {
        $('input:checked').attr('checked', false);
        rb.checked = true;
    }

对于每个radiobutton(这是radiobuttonlist中的listitem),我在服务器端添加以下内容:

li.Attributes.Add("onclick", "javascript:SetRadio(this)");

对我来说,这适用于IE和Firefox,有3个radiobuttonlists,不使用组名。 您可以检查每个radiobuttonlist以查看selecteditem /值,或者您可以扩展SetRadio函数,以便将所选值存储在隐藏字段中。

此致 中号