gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-03 07:50:43 26 4
gpt4 key购买 nike

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

转发器写入单选按钮,设置其 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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com