2015-04-20 33 views
1

我有一个页面有两组控件,每个组的设置都不相同,但如果我试图正确填写一个表单,其他表单的验证器会停止单击射击事件。ASP.NET验证组不起作用服务器端

我注意到它的行为通常是客户端,但按钮然后导致回发事件和服务器验证程序似乎不尊重验证组。我不确定我做错了什么。当然,内置的验证器都支持服务器端的验证组?

下面是一个完整的独立例如:

<%@ Page Language="C#" %> 
<script runat="server"> 
    protected void SubmitButton_Click(object sender, EventArgs e) 
    { 
     Page.Validate(); 
     if (Page.IsValid) label.Text = "OK: " + ((Button)sender).ID.ToString(); 
    } 
</script> 
<!DOCTYPE html> 
<html> 
    <head runat="server"> 
     <style> 
      body { font-family: sans-serif;} 
      .warning { color: red;} 
     </style> 
    </head> 
    <body> 
     <form id="f1" runat="server"> 

      <h1>Validator Test</h1> 

      <asp:Label ID="label" runat="server" Font-Bold="true" ForeColor="Green" EnableViewState="false" /><br /> 


      <div style="width:40%; float:left; height:200px; border:1px solid #eee; padding:15px; margin:5px;">    
       <h2>Left Form:</h2> 

       Email: <asp:TextBox ID="leftBox" runat="server" Columns="20" MaxLength="80" Width="160px" ValidationGroup="LEFT" /> 

       <asp:RequiredFieldValidator ID="left2" runat="server" ControlToValidate="leftBox" 
        ErrorMessage="You must enter a value." ValidationGroup="LEFT">*</asp:RequiredFieldValidator> 
       <asp:RegularExpressionValidator ID="rev8" runat="server" ControlToValidate="leftBox" ValidationGroup="LEFT" Text="*" 
         ErrorMessage="Email address format is invalid." ValidationExpression="^[\.\-\w][email protected]([\w\-]+\.)+\w+$" /> 
       <asp:Button ID="LeftSubmitButton" runat="server" Text="Save Left" OnClick="SubmitButton_Click" ValidationGroup="LEFT" /> 
       <asp:ValidationSummary ID="LeftValidationSummary" runat="server" HeaderText="Error:" ValidationGroup="LEFT" CssClass="warning" /> 
      </div> 

      <div style="width:40%; float:left; height:200px; border:1px solid #eee; padding:15px; margin:5px;"> 
       <h2>Right Form:</h2> 

       Email: <asp:TextBox ID="rightBox" runat="server" Columns="20" MaxLength="80" Width="160px" ValidationGroup="RIGHT" /> 
       <asp:RequiredFieldValidator ID="rfv9" runat="server" ControlToValidate="rightBox" 
        ErrorMessage="You must enter an value." ValidationGroup="RIGHT">*</asp:RequiredFieldValidator> 
       <asp:RegularExpressionValidator ID="rev10" runat="server" ControlToValidate="rightBox" ValidationGroup="RIGHT" Text="*" 
         ErrorMessage="Email address format is invalid." ValidationExpression="^[\.\-\w][email protected]([\w\-]+\.)+\w+$" /> 
       <asp:Button ID="RightSubmitButton" runat="server" Text="Save Right" OnClick="SubmitButton_Click" ValidationGroup="RIGHT" /> 
       <asp:ValidationSummary ID="RightValidationSummary" runat="server" HeaderText="Error:" ValidationGroup="RIGHT" CssClass="warning" /> 
      </div> 

     </form> 
    </body> 
</html> 
+0

什么是不工作的服务器端,你在看'Page.IsValid'并期待它是'真正'? – mattytommo

回答

2

取出明确整版验证 - 这是这一行: Page.Validate();它无视确认团组。

你会注意到Page.Validate()也有覆盖,允许你指定确切的验证组 - 如Page.Validate("RIGHT")。这是为框架目的而设计的;网络表单基础架构已经为您调用正确的Validate(),因此不需要明确地调用它。

+0

谢谢!我的演示代码并不完全模仿我的实际项目,我需要知道Page_Load()中的页面是否有效,但是设置正确的Page.Validate(“”)已经为我解决了这个问题。真的很有帮助 - 谢谢! – NickG