我继承了一个包含与此类似的RadioButtonList结构的表单(名称已更改以保护无辜者):
<asp:RadioButtonList id="ChicagoCubsInfield" RepeatDirection="Vertical" RepeatColumns="1" XPath="somePath">
<asp:ListItem Value="Tinker" Text="Tinker (Shortstop)" />
<asp:ListItem Value="Evers" Text="Evers (Second Base)" />
<asp:ListItem Value="Chance" Text="Chance (First Base)" />
</asp:RadioButtonList>
当它在浏览器中呈现时,当然看起来像这样:
<table id="ctl00_Content_ChicagoCubsInfield XPath="somePath">
<tr><td><input id="ctl00_Content_ChicagoCubsInfield_0" type="radio" name="ctl00$Content$ChicagoCubsInfield" value="Tinker" /><label for="ctl00_Content_ChicagoCubsInfield_0">Tinker (Shortstop)</label></td></tr>
<tr><td><input id="ctl00_Content_ChicagoCubsInfield_1" type="radio" name="ctl00$Content$ChicagoCubsInfield" value="Evers" /><label for="ctl00_Content_ChicagoCubsInfield_1">Evers (Second Base)</label></td></tr>
<tr><td><input id="ctl00_Content_ChicagoCubsInfield_2" type="radio" name="ctl00$Content$ChicagoCubsInfield" value="Chance" /><label for="ctl00_Content_ChicagoCubsInfield_2">Chance (First Base)</label></td></tr>
</table>
这是我的问题:我需要它看起来像这样(注意表格单元格渲染的差异):
<table id="ctl00_Content_ChicagoCubsInfield XPath="somePath">
<tr><td><input id="ctl00_Content_ChicagoCubsInfield_0" type="radio" name="ctl00$Content$ChicagoCubsInfield" value="Tinker" /><label for="ctl00_Content_ChicagoCubsInfield_0">Tinker</label></td><td>(Shortstop)</td></tr>
<tr><td><input id="ctl00_Content_ChicagoCubsInfield_1" type="radio" name="ctl00$Content$ChicagoCubsInfield" value="Evers" /><label for="ctl00_Content_ChicagoCubsInfield_1">Evers</label></td><td>(Second Base)</td></tr>
<tr><td><input id="ctl00_Content_ChicagoCubsInfield_2" type="radio" name="ctl00$Content$ChicagoCubsInfield" value="Chance" /><label for="ctl00_Content_ChicagoCubsInfield_2">Chance</label></td><td>(First Base)</td></tr>
</table>
换句话说,我需要将名称和(位置)分隔成单独的列,但它们仍然需要按行对齐。这可能在RadioButtonList中吗?
我已经尝试将它们制作成单独的RadioButton对象,但在这样做之后,我开始得到以下内容:
由''的ControlToValidate属性引用的控件'ctl00 $ Content $ ChicagoCubsInfield_0'无法验证。
我尝试搞乱验证(包括将CausesValidation属性设置为“False”),但都无济于事。
注意:我不像关于表格渲染那样关注验证错误;更重要的是(除非,修复验证错误有助于解决渲染问题)。
解决这个问题的最佳方法是什么?
提前致谢。 。
编辑:我能够通过使用直接客户端&lt; input&gt;重新创建我想要的内容标签,但这不是理想的。我更喜欢使用服务器端&lt; asp:RadioButton&gt;。
我一直在做一些挖掘,看来我的RadioButton标签验证失败的原因是因为ct100前缀连接到ID / Name标签的开头。当页面正常工作时(使用RadioButtonList),每个ListItem的ID似乎都有一个“ct100_Content_”前缀,但该名称的前缀为“ct100 $ Content $”。
我得到的错误(当尝试使用单独的RadioButtons时)是:
由''的ControlToValidate属性引用的控件'ctl00 $ Content $ ChicagoCubsInfield_0'无法验证。
从我所看到的,我认为控件正在寻找“ctl00_Content_ChicagoCubsInfield_0”(注意“_”而不是“$”)。
如何强制ID使用下划线而不是美元符号?我需要将它保留在这些标签的本地,因为我相信设置在其他地方使用(再次,这不是我的形式),我不想破坏其他任何东西。
编辑:这个理论太多了。我遇到了“ClientIDMode”属性,将其设置为“Static”,并显式设置了我的ID。没有骰子。挖掘仍在继续。 。
答案 0 :(得分:2)
这可能是您正在寻找的答案:
$( document ).ready(function() {
$('label[for^="ChicagoCubsInfield"]' ).each(function() {
var data = $(this).text();
var arr = data.split('(');
$(this).text(data.substring(0, data.indexOf("(")));
$(this).parent().parent().append("<td>(" + arr[1] + "</td>");
// alert(arr[0] + " : " + arr[1]);
});
//alert( $('#ctl00_Content_ChicagoCubsInfield').html());
});
参见演示:
<强> Demo Here 强>
答案 1 :(得分:0)
当所有的事情都说完了,这就是我最终做的事情。 。
我将此添加到我的&lt; script&gt;:
$('table[id*="ct_100_Content_ChicagoCubsInfield"] tr:eq(0)').append(<td>(Shortstop)</td>);
$('table[id*="ct_100_Content_ChicagoCubsInfield"] tr:eq(1)').append(<td>(Second Base)</td>);
$('table[id*="ct_100_Content_ChicagoCubsInfield"] tr:eq(2)').append(<td>(First Base)</td>);
$('table[id*="ct_100_Content_ChicagoCubsInfield"] tr td').css([misc formatting goes here]);
这完全符合我的要求。现在我可以随意格式化表格。