我需要创建几个场景:
1)如果下拉列表具有特定值,请将特定文本框设为必填字段。
2)如果特定文本框有数据,则需要另一个文本框(如果填写地址字段,需要城市,州和邮编)
我有一些代码可以从一对看起来正确的CustomValidator调用:
<asp:CustomValidator ID="cvtxt_pat_id" runat="server"
OnServerValidate="txt_pat_idValidate" ControlToValidate="txt_pat_id"
ErrorMessage="Text must be 8 or more characters." Display="Dynamic"/>
protected void txt_pat_idValidate(object sender, ServerValidateEventArgs e)
{
if (ddl_addl_pat_info.SelectedValue.ToString() == "2")
{
e.IsValid = (e.Value.Length > 1);
}
else
{
e.IsValid = true;
}
}
<asp:CustomValidator ID="cvtxt_pat_id" runat="server"
OnServerValidate="addresspartsValidate" ControlToValidate="txt_city"
ErrorMessage="Complete address must be entered." Display="Dynamic"/>
protected void addresspartsValidate(object sender, ServerValidateEventArgs e)
{
if (txt_pat_address.Text.Length > 1)
{
e.IsValid = (e.Value.Length > 1);
}
else
{
e.IsValid = true;
}
}
但据我所知,如果我正在测试的文本框是空的,那么框永远不会验证,所以如果它们是空白的,则不会触发,这使得很难检查必需的字段。所以...想法?
另外,关于我是否需要同时拥有测试的客户端和服务器版本,我遇到了相互矛盾的故事。也许它在旧版本中是必需的,现在不是吗?
答案 0 :(得分:4)
你必须稍微考虑一下。您的自定义验证器应位于应显示错误的项目(特定文本框)上。文本框上的自定义验证程序应检查下拉列表,以查看下拉列表是否具有触发文本框所需条件所需的特定条件。如果发现它是真的,那么你想检查文本框是否有输入并相应地返回args.IsValid。
protected void cvTimeOfDay_ServerValidate(object source, ServerValidateEventArgs args)
{
if(ddlTimeOfDay.SelectedValue == "1" && txtbAddress.Text.Length == 0)
args.IsValid = false;
else
args.IsValid = true;
}
var MyValidation = {
DropdownValidation: function (sender, eventArgs) {
var isValid;
if (eventArgs && $('#ddlTimeOfDay').val() == '1') {
isValid = false;
}
else
isValid = true;
eventArgs.IsValid = isValid; }
}
<asp:DropDownList ID="ddlTimeOfDay" runat="server" ClientIDMode="Static">
<asp:ListItem Text="-Select-" Value="0"></asp:ListItem>
<asp:ListItem Text="PM" Value="1"></asp:ListItem>
<asp:ListItem Text="AM" Value="2"></asp:ListItem>
</asp:DropDownList>
<br />
<asp:TextBox Text="" ID="txtbAddress" runat="server" ClientIDMode="Static"></asp:TextBox>
<asp:CustomValidator ID="cvTimeOfDay" runat="server"
ErrorMessage="MustSelectValue"
ClientValidationFunction="MyValidation.DropdownValidation"
ControlToValidate="txtbAddress" ValidationGroup="group1"
onservervalidate="cvTimeOfDay_ServerValidate" ValidateEmptyText="true"></asp:CustomValidator>
<asp:Button ID="Button1" runat="server" Text="Button" ValidationGroup="group1"/>
要使用自定义验证程序验证空白文本框,您需要将ValidateEmptyText属性设置为“true”。
如果您的网站无法确保JavaScript已启用以使用该网页,则通常会同时使用这两者。有些浏览器可以关闭JavaScript;如果JavaScript被关闭,它会绕过您的验证。使用客户端验证是好的,因为它不会每次回发验证输入,它在客户端上正确。