简单地说,我有一个Gridview有两个ItemTemplate用于TextBox,另一个用于CustomValidator,我有一个该网格外的按钮
当我点击按钮时,我只想通过网格中的CustomValidators验证Textboxes
我希望能够捕获在CustomValidator的同一行中找到的Textbox
在这个函数中
function ValidateModuleList(source, args) {
}
我试过像
这样的东西function ValidateModuleList(source, args) {
var row = $(this).parent('td').parent('tr');
var textbox = row.find('textbox1') ;
}
但它不起作用。
验证
<ItemTemplate>
<asp:CustomValidator runat="server" ID="cvmodulelist" ClientValidationFunction="ValidateModuleList" CssClass="CustomValid" ErrorMessage="*" ValidationGroup="vg_Save_Req_TP_Settings">*
</asp:CustomValidator>
</ItemTemplate>
答案 0 :(得分:1)
在CustomValidator中设置controlToValidate =“TextBox1”。模板可能如下所示:
<asp:TemplateField >
<ItemTemplate>
<asp:TextBox ID="TextBox1" runat="server" CausesValidation="true" >
</asp:TextBox>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField >
<ItemTemplate>
<asp:CustomValidator runat="server" ID="cvmodulelist" ClientValidationFunction="ValidateModuleList"
CssClass="CustomValid" ErrorMessage="*"
ControlToValidate="TextBox1"
ValidationGroup="vg_Save_Req_TP_Settings">*
</asp:CustomValidator>
</ItemTemplate>
</asp:TemplateField>
在脚本中找到最接近的'tr'源。通过部分名称查找文本框。请记住,服务器会将文本框呈现为<input name="GridView1$ctl03$TextBox1" type="text" id="GridView1_TextBox1_1" />
之类的内容。这是您可以用于测试的脚本:
<script type="text/javascript">
function ValidateModuleList(source, args) {
var textbox = $(source).closest('tr').find('input[name*="TextBox1"]');
alert(textbox.val());
}
</script>
不要忘记在页面的顶部添加对jquery的引用:
<head runat="server">
<script src="Scripts/jquery-1.8.2.js"></script>
希望这会帮助你开始!