2011-01-28 123 views
2

我需要为国家(下拉列表),地址(文本框),城市(文本框),州(下拉)和Zip(文本框)。如果从下拉列表中选择“美国”,我只想验证城市,州和邮政编码。通过“验证”我的意思是检查长度 - 就是这样。如果选择“美国”作为国家,只验证城市,州和邮编

我试过使用自定义验证器,但我失去了一些东西,因为看起来应该工作的代码没有做任何事情。例如:

<asp:CustomValidator ErrorMessage="City, State, and Zip are required fields" 
Display="None" ID="LocationValidator" 
runat="server" ClientValidationFunction="validateLocation" 
onservervalidate="LocationValidator_ServerValidate"> 
</asp:CustomValidator> 

那么这里就是我的验证码

客户端验证:

function validateLocation(sender, args) { 
    var country = jQuery("#main_2_MailingAddress_Country").val(); 
    var city = jQuery("#main_2_MailingAddress_City").val(); 
    if (city.Length() > 0) 
    { 
     args.IsValid = true; 
    } 
    else 
    { 
     args.IsValid = country != "United States"; 
    } 
} 

服务器端验证:

protected void LocationValidator_ServerValidate(object source, ServerValidateEventArgs args) 
    { 
     if (City.Text.Length > 0) 
     { 
      args.IsValid = true; 
     } 
     else //nothing was entered for "City" 
     { 
      args.IsValid = Country.SelectedValue != "United States"; 
     } 
     //similar functions for State and Zip go here 
    } 

如果我只做服务器de验证,并且不填写表单中的任何内容(除地址字段外还有其他必填字段),那么我为其他字段的RequiredFieldValidators激发。但是,如果我填写除City,State和Zip(选择美国为该国家/地区)以外的所有字段,则表单提交时不会捕获这些空白。

如果我为自定义验证器指定了客户端和服务器端验证(如上例所示),则不会激发任何验证器并提交表单。

我意识到这可能是一个漫长而令人困惑的帖子,但是有没有关于我要去哪里的错误的想法?

+1

您可以在回发时使用Page.Validate()强制进行页面验证。 – 2011-01-28 22:25:35

回答

2

很难说什么地方出了错与RequiredFieldValidators,因为他们在本例中是不是(你指定哪个控件来验证?),但这里有一个例子应该有希望帮助您:

protected void LocationValidator_ServerValidate(object source, ServerValidateEventArgs args) 
     { 
      args.IsValid = IsCountryValid(); 
     } 

     private bool IsCountryValid() 
     { 
      if (Country.SelectedValue == "US") 
      { 
       if (String.IsNullOrEmpty(City.Text)) 
        return false; 

       if (String.IsNullOrEmpty(State.SelectedValue)) 
        return false; 

       if (String.IsNullOrEmpty(Zip.Text)) 
        return false; 
      } 
      else if (String.IsNullOrEmpty(Country.SelectedValue)) 
      { 
       return false; 
      } 

      return true; 
     } 

我改变了显示为“动态”,以便能够看到消息:

<asp:CustomValidator ID="LocationValidator" runat="server" 
      ErrorMessage="City, State, and Zip are required fields" Display="Dynamic" 
      OnServerValidate="LocationValidator_ServerValidate"></asp:CustomValidator> 

如果您在下拉值,而不是空字符串则明显变化对于那些验证,但我希望这有助于!

+0

真棒,这工作。另一个关键是将验证组添加到customvalidator。然后我从调用这个用户控件的Page_Load里面做了Page.Validate(“validationgroup”)和一个if(!IsValid)。尽管你帮助我理解逻辑,我会给你答案 - 谢谢! – esvendsen 2011-02-03 16:15:48