我需要根据TextBox
控件中选择的值验证DropDownList
。我有asp:TextBox
和asp:DropDownList
个控件。
如果用户从第一个下拉列表中选择Yes
选项,则必须在文本框中键入值。如何验证第二个框?谢谢你的帮助。
答案 0 :(得分:4)
最简单的方法是将DropDownList的AutoPostBack
属性设置为true
并处理它的SelectedIndexChanged
事件。然后你可以在那里启用/禁用验证器。
另一种方法是使用CustomValidator
。此验证器不依赖于单个控件。您必须自己编写验证规则。例如ClientValidationFunction:
<script type="text/javascript" >
function ClientValidate(source, arguments) {
var txt = document.getElementById('TextBox1');
var ddl = document.getElementById('DropDownList1');
var decision = ddl.options[ddl.selectedIndex].text;
if(decision=='Yes'){
arguments.IsValid = txt.value.length > 0;
}else{
arguments.IsValid = true;
}
}
</script>
<asp:DropDownList id="DropDownList1" runat="server">
<asp:ListItem Selected="True">Yes</asp:ListItem>
<asp:ListItem Selected="False">No</asp:ListItem>
</asp:DropDownList>
<asp:TextBox id="TextBox1" runat="server" />
<asp:Button ID="BtnSubmit" runat="server" Text="Submit" />
<asp:CustomValidator id="CustomValidator1"
ValidateEmptyText="true"
ControlToValidate="TextBox1"
ClientValidationFunction="ClientValidate"
OnServerValidate="ServerValidation"
Display="Static"
ErrorMessage="Please enter text!"
runat="server"/>
请记住始终实施OnServerValidate因为您不应该只依赖javascript(可以禁用)。这很简单:
void ServerValidation(object source, ServerValidateEventArgs args){
args.IsValid = DropDownList1.SelectedIndex == 1 || TextBox1.Text.Length > 0;
}
VB.NET
Protected Sub ServerValidation(source As Object, args As System.Web.UI.WebControls.ServerValidateEventArgs)
args.IsValid = DropDownList1.SelectedIndex = 1 OrElse TextBox1.Text.Length > 0
End Sub
答案 1 :(得分:0)
将此代码添加到您的提交按钮。
if(DropDownList1.SelectedItem.Text.Equals("Yes") && TextBox1.Text.Length==0)
{
Page.ClientScript.RegisterStartupScript(this.GetType(), "myalert", "alert('Enter data in the textbox !');", true);
}
答案 2 :(得分:0)
添加一个CustomValidator
控件,验证TextBox
,从那里你必须在CustomValidator_ServerValidate
事件处理程序中做这样的事情(假设是C#):
bool valid = false;
if (dropDownList.SelectedValue.Equals("yes")) {
valid = !String.IsNullOrEmpty(textBox.Text);
}
return valid;