我在询问是否可以在以下情况下使字段成为必需字段: 如果另一个字段不为空,则设置所需的文本框,否则它将是可选的。
答案 0 :(得分:6)
您可以使用CustomValidator来实现此目的,但您需要了解一些内容才能使其正常运行。问题是,如果在验证器上设置ControlToValidate
属性,那么只有在该控件具有值时才会触发它。在您的情况下,您希望在没有值时专门验证它。
要解决此问题,请不要在验证程序上设置ControlToValidate
属性。然后,在您的客户端和服务器验证处理程序中,您将需要直接访问这两个文本框。
在您的客户端验证功能中,您可以执行以下操作:
function OnCustomClientValidate(source, e) {
e.IsValid = true;
var otherTextBoxValue = $('#<%=OtherTxtBox.ClientID%>').val().trim();
if (otherTextBoxValue == '') {
return;
}
var controlToValidateValue = $('#<%=TextBoxToValidate.ClientID%>').val().trim();
if (controlToValidateValue == '') {
e.IsValid = false;
}
}
您的服务器验证方法可能如下所示:
protected void OnCustomServerValidate(object source, ServerValidateEventArgs e)
{
e.IsValid = true;
// Don't validate anything if `OtherTextBox` is empty
if (OtherTxtBox.Text.Trim() == String.Empty)
{
return;
}
// If we got this far then we need to set IsValid to false if the ControlToValidate has no value
if (TextBoxToValidate.Text.Trim() == String.Empty)
{
e.IsValid = false;
}
}
你的aspx可能是这样的:
<asp:TextBox ID="OtherTextBox" runat="server"></asp:TextBox>
<asp:CustomValidator ID="MyCustomValidator" runat="server" ClientValidationFunction="OnCustomClientValidate" OnServerValidate="OnCustomServerValidate" Display="Dynamic" ErrorMessage="Please enter a value"></asp:CustomValidator>
<asp:TextBox ID="TextBoxToValidate" runat="server"></asp:TextBox>
请注意,使用此方法时,它不会验证要验证的(预期)控件何时失去焦点,因为我们尚未指定该控件。因此,当您提交表单时,客户端验证将触发,但如果验证失败,则会取消回发。
答案 1 :(得分:1)
执行此类验证的方法之一是使用自定义验证器。然后,您可以连接自定义验证程序,以执行验证服务器端或客户端。
强制性MSDN链接:How to: Validate with a Custom Function for ASP.NET Server Controls