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