Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/319.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何根据条件设置所需字段?_C#_Asp.net_Validation - Fatal编程技术网

C# 如何根据条件设置所需字段?

C# 如何根据条件设置所需字段?,c#,asp.net,validation,C#,Asp.net,Validation,我想问的是,是否有可能在如下条件下创建所需的字段: 如果另一个字段不为空,则需要设置文本框,否则它将是可选的。执行类似验证的方法之一是使用自定义验证器。然后,您可以连接自定义验证器来执行服务器端或客户端验证 强制性MSDN链接:您可以使用一个用于此目的的,但为了使其正常工作,您需要知道一些事情。问题是,如果您在验证器上设置了ControlToValidate属性,那么它将仅在该控件具有值时才会激发。在您的情况下,您希望在它没有值时特别验证它 要解决这个问题,请不要在验证器上设置ControlTo

我想问的是,是否有可能在如下条件下创建所需的字段:
如果另一个字段不为空,则需要设置文本框,否则它将是可选的。

执行类似验证的方法之一是使用自定义验证器。然后,您可以连接自定义验证器来执行服务器端或客户端验证

强制性MSDN链接:

您可以使用一个用于此目的的,但为了使其正常工作,您需要知道一些事情。问题是,如果您在验证器上设置了
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;
    }            
}
<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>
您的aspx可能是这样的:

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;
    }            
}
<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>


请注意,在使用这种方法时,当(预期的)要验证的控件失去焦点时,它不会进行验证,因为我们没有指定该控件。因此,当您提交表单时,客户端验证将启动,但如果验证失败,回发将被取消。

非常感谢您的建议非常有用:)