【发布时间】:2012-02-07 13:07:25
【问题描述】:
在开始之前,我只想声明,由 ASP.NET 为 CheckBoxLists 创建的代码可能是我见过的最糟糕的事情。
不管怎样,
我正在使用 jQuery 验证插件来验证我的 ASP.net 表单。需要验证某些复选框。这些是由 CheckBoxList 控件生成的。
<asp:CheckBoxList ID="CBContext" runat="server" RepeatColumns="2"
DataSourceID="sqlLibraryEnquiries" DataTextField="value" DataValueField="value" name="topic">
</asp:CheckBoxList>
这个控件产生了以下可憎的 xHTML
<table id="MainContent_CBContext" name="topic">
<tr>
<td>
<input id="MainContent_CBContext_0" type="checkbox" name="ctl00$MainContent$CBContext$0" value="Business" /><label for="MainContent_CBContext_0">Business</label>
</td>
<td>
<input id="MainContent_CBContext_2" type="checkbox" name="ctl00$MainContent$CBContext$2" value="Legal" /><label for="MainContent_CBContext_2">Legal</label>
</td>
</tr>
<tr>
<td>
<input id="MainContent_CBContext_1" type="checkbox" name="ctl00$MainContent$CBContext$1" value="Business Development" /><label for="MainContent_CBContext_1">Business Development</label>
</td>
<td>
<input id="MainContent_CBContext_3" type="checkbox" name="ctl00$MainContent$CBContext$3" value="Library" /><label for="MainContent_CBContext_3">Library</label>
</td>
</tr>
</table>
我遇到的问题实际上是让 jQuery Validator 插件挂接到复选框列表中。在我的所有其他字段的规则部分中,我可以用他们的名字找到他们 例如 ctl00$MainContent$tbActions: 但复选框都有不同的名称。
cb_selectone 规则未触发,因为我尝试验证的对象从未找到。 我尝试了以下标识符。 CBContext、ctl00$MainContent$CBContext、MainContent_CBContext 和复选框。
$("#Form1").validate({
rules: {
//WHAT GOES HERE???? --------->> CBContext or ctl00$MainContent$CBContext or MainContent_CBContext or checkboxes all don't work: {
cb_selectone: true
}
}
});
感谢您的帮助。
SM
【问题讨论】:
-
为什么你认为 asp 呈现复选框的方式令人厌恶?只是好奇...
-
命名约定很烂,没有必要让每个人都有不同的名字,当他们有ID的时候。还有为什么是表而不是跨度?从 DOM 的角度来看,这并不容易。
-
命名约定部分适用于所有实现 INamingContainer 接口的控件,我同意你的不同名称。另外,真的,为什么是表而不是跨度?或许这一切背后都有不为人知的秘密原因。
-
我只是觉得它现在有点过时了。 M$ 将 jQuery 撬入 VS2010,但一些旧技术不是很兼容。 :-/
标签: jquery asp.net jquery-validate checkboxlist