我需要执行条件验证。逻辑应该像这样工作:
如果选择单选按钮1,则需要textbox1 如果选择了单选按钮2,则需要dropdownlist1。
实现这一目标的最佳方法是什么?
答案 0 :(得分:3)
答案 1 :(得分:0)
客户端使用JQuery验证插件。如果使用ASP.NET控件,请调整名称以适合ASP.NET提供的名称。服务器端相对容易 - 检查选择了哪个无线电,并确保文本框或下拉列表的值不为空。
$(function() {
$('form').validate( {
rules: {
required-textbox: function() { return $('#radio_yes:checked').size(); }
required-ddl: function() { return $('#radio_no:checked').size(); }
}
});
})
<input type='radio' id='radio_yes' name='radio' value='1' /> Choice 1
<input type='radio' id='radio_no' name='radio' value='2' /> Choice 2
<input type='text' id='textinp' name='textinp' class='required-textbox' />
<select id='ddl' name='ddl' class='required-ddl'>
<option ... />
</select>
您也可以使用CustomValidator执行此操作 - 再次使用jQuery客户端。同样,服务器端功能是微不足道的(并且与其他情况基本相同)。
function validateTextBox(source, args)
{
args.IsValid = $('[id$="radio_yes"]:checked').size() && $(source).val();
}
function validateDDL(source, args)
{
args.IsValid = $('[id$="radio_no"]:checked').size() && $(source).val();
}
<asp:RadioButton ID="radio_yes" runat="server" GroupName="radio" /> Choice 1
<asp:RadioButton ID="radio_no" runat="server" GroupName="radio" /> Choice 2
<asp:TextBox ID="textbox" runat="server" />
<asp:CustomValidator ID="textboxValidator" runat="server"
ControlToValidate="textbox"
ClientValidationFunction="validateTextBox"
OnServerValidate="ddl_Validate"
Display="Static"
ErrorMessage="*" />
<asp:DropDownList ID="ddl" runat="server">
....
</asp:DropDownList>
<asp:CustomValidator ID="ddlValidator" runat="server"
ControlToValidate="ddl"
ClientValidationFunction="validateDDL"
OnServerValidate="textbox_Validate"
Display="Static"
ErrorMessage="*" />