ASP.NET RadioButton 与名称(组名)混淆

标签 asp.net radio-button

我有一个模板化控件(一个中继器),列出了一些文本和其他标记。每个项目都有一个与之关联的单选按钮,使用户可以选择中继器创建的项目之一。

转发器写入单选按钮,设置其 id 和生成的名称,使用默认的 ASP.NET 命名约定,使每个单选按钮成为一个完整的“组”。这意味着所有单选按钮都是相互独立的,不幸的是,这再次意味着我可以同时选择所有单选按钮。单选按钮具有用于设置通用名称的巧妙属性“组名”,因此它们被组合在一起,因此应该相互依赖(所以我一次只能选择一个)。问题是 - 这不起作用 - 转发器确保 id 和名称(控制分组)是不同的。

由于我使用中继器(可能是 ListView 或任何其他模板化数据绑定(bind)控件),我无法使用 RadioButtonList。那么,这让我何去何从?

我知道我以前遇到过这个问题并解决了它。我知道几乎每个 ASP.NET 程序员都必须拥有它,那么为什么我不能 google 并找到解决问题的可靠方法呢?我遇到了通过 JavaScript 强制分组的解决方案(丑陋!),甚至将单选按钮作为非服务器控件处理,迫使我执行 Request.Form[name]读取状态。我还尝试过覆盖 PreRender 上的 name 属性。事件 - 不幸的是,拥有页面和母版页再次覆盖此名称以反射(reflect)完整的 ID/名称,所以我最终得到了相同的错误结果。

如果您没有比我发布的更好的解决方案,仍然非常欢迎您发表您的想法 - 至少我会知道我的 friend “ jack ”是正确的,关于 ASP.NET 有时是多么困惑;)

最佳答案

ASP.NET 提示:在中继器中使用 RadioButton 控件

这是 JavaScript 函数的代码:

function SetUniqueRadioButton(nameregex, current)
{
   re = new RegExp(nameregex);
   for(i = 0; i < document.forms[0].elements.length; i++)
   {
      elm = document.forms[0].elements[i]
      if (elm.type == 'radio')
      {
         if (re.test(elm.name))
         {
            elm.checked = false;
         }
      }
   }
   current.checked = true;
}

代码通过ItemDataBound 事件链接到Repeater。为了使其正常工作,您需要知道Repeater 控件的名称,以及您分配给RadioButtons 的GroupName。在这种情况下,我使用 rptPortfolios 作为中继器的名称,并使用 Portfolios 作为组名:
protected void rptPortfolios_ItemDataBound(object sender,
                                           RepeaterItemEventArgs e)
{
   if (e.Item.ItemType != ListItemType.Item && e.Item.ItemType
      != ListItemType.AlternatingItem)
      return;

   RadioButton rdo = (RadioButton)e.Item.FindControl("rdoSelected");
   string script =
      "SetUniqueRadioButton('rptPortfolios.*Portfolios',this)";
   rdo.Attributes.Add("onclick", script);

}

编号:http://www.codeguru.com/csharp/csharp/cs_controls/custom/article.php/c12371/

关于ASP.NET RadioButton 与名称(组名)混淆,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/377393/

相关文章:

c# - 在 MVVM 之后从 WPF 中的组框确定选中的单选按钮

c# - 带模板的 Asp.Net MVC EditorFor Array

c# - Windows 7 IIS 7.5 与 System.ComponentModel.Browsable 属性的奇怪行为

asp.net - ASP.NET MVC 中的response.write 是什么?

javascript - 我如何在 jquery 中获得警告框?

java - 更改 JRadioButton 中 ImageIcon 的大小

ruby-on-rails - simple_forms 中的 collection_radio_buttons 属性将所有内容包装在 div 中

asp.net - 有没有办法知道 session 使用了多少 RAM?

asp.net - 查询字符串中的斜杠问题

javascript - JS函数未定义,传递变量