客户验证ASP.NETC#

客户验证ASP.NETC#,c#,asp.net,C#,Asp.net,我和这个论坛上的其他人有同样的问题。我的验证控制没有启动…也不确定我哪里出错了。请有人看一下,让我知道我这里有什么明显的错误…谢谢 我已在我的aspx页面中使用以下内容设置了客户验证程序: <asp:TextBox ID="EmployeeNumber2TextBox" runat="server" Text='<%# Bind("EmployeeNumber") %>'Visible='<%# AllowEmployeeNumberEdit() %>

我和这个论坛上的其他人有同样的问题。我的验证控制没有启动…也不确定我哪里出错了。请有人看一下,让我知道我这里有什么明显的错误…谢谢

我已在我的aspx页面中使用以下内容设置了客户验证程序:

       <asp:TextBox ID="EmployeeNumber2TextBox" runat="server"
 Text='<%# Bind("EmployeeNumber") %>'Visible='<%# AllowEmployeeNumberEdit() %>' />

           <asp:CustomValidator ID="ValidateEmpNumber" runat="server" 
onservervalidate="ValidateEmpNumber_ServerValidate" 
    controltovalidate="EmployeeNumber2TextBox" 
    ErrorMessage="You Must Enter an Employee Number" Text="*" />

验证程序是否与执行提交/回发的控件同步?此外,没有任何条件允许它为
true


你怎么知道它没有启动?

你有没有试着让OnServerValidate和ControlToValidate使用每个单词大写的第一个字母?这些属性可能区分大小写

我可以在我的系统上运行你的代码的精简版本

您确定您的Web.config已设置为编译调试吗?:


是代码根本没有运行,还是只是没有验证?为了安全起见,您可以显示正在执行提交的控件标记吗?我在方法上设置了一个中断,但它从未到达…当字段留空时,我从数据库收到一条错误消息。听起来您的程序正在中断。在方法的第一行设置断点:
int SiteCompanyID=System.Convert.ToInt32(会话[“SiteCompanyID]”)
并查看它是否命中,您的方法没有从文本框中获取文本。它似乎与验证输入无关,除非它位于
GetCompanyById()
。只是想一想,试着用默认值替换
值,看看如果其他方法都不起作用的话,这是否有用。我不确定问题出在哪里,但我不认为在这一点上它是在代码背后…验证方法根本没有被调用…我已经在方法的开始设置了一个断点,它从来没有击中它…这个验证控件在表单视图的插入模板中。谢谢,我会继续努力的。@Steve嗯,这改变了一切。你介意在文本框和验证器周围张贴代码吗?formview代码?是的……我刚刚测试过,结果没有改变。这可能与您的问题无关,但我注意到,绑定引号和“Visible=”之间没有空格。Visible前面应该有一个空格。它只是以这种方式复制过来的…它实际上是在一个单独的行上,但是谢谢你,请参见上面的编辑。在我的测试中,我删除了数据绑定,并对输入元素中的一些值进行了硬编码。好的……我在另一个关于同一问题的查询的帮助下找到了问题的答案。首先,因为我的测试是查看textbox是否为空,所以我需要添加并指定一个“ValidateEmptyText”属性为true。显然,如果文本框为空,它将不会激发,除非您添加此属性。其次,我没有将sumbit按钮上的“CausesValidation”更改为=“True”,因此我对这一疏忽表示歉意。感谢所有的帮助,我希望这能在将来帮助别人。
  protected void ValidateEmpNumber_ServerValidate(object sender, System.Web.UI.WebControls.ServerValidateEventArgs e)
  {
      int SiteCompanyID = System.Convert.ToInt32(Session["SiteCompanyID"]);
      SiteCompanyBLL SiteCompany = new SiteCompanyBLL();
      SiteCompanyDAL.SiteCompanyRow ScRow = SiteCompany.GetCompanyByID(SiteCompanyID);
      bool AutoGenerate = ScRow.AutoGenNumber;  // result returning true or false
      if (AutoGenerate == false)
      {
          if (e.Value.Length == 0)
          e.IsValid = false;
      else
          e.IsValid = false;
      }
  }