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

时间:2012-03-31 09:46:50

标签: c# asp.net validation

我在询问是否可以在以下情况下使字段成为必需字段: 如果另一个字段不为空,则设置所需的文本框,否则它将是可选的。

2 个答案:

答案 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