如何设置所需的字段取决于条件?

spe*_*ife 2 c# asp.net validation

我问是否可以在以下条件下使字段成为必需:如果其他字段不为空则设置所需的文本框,否则它将是可选的.

Rob*_*bie 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;
    }
}
Run Code Online (Sandbox Code Playgroud)

您的服务器验证方法可能如下所示:

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;
    }            
}
Run Code Online (Sandbox Code Playgroud)

你的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>
Run Code Online (Sandbox Code Playgroud)

请注意,使用此方法时,它不会验证要验证的(预期)控件何时失去焦点,因为我们尚未指定该控件.因此,当您提交表单时,客户端验证将会触发,但如果验证失败,则会取消回发.