服务器端自定义验证程序未触发

时间:2014-10-14 14:55:17

标签: asp.net vb.net asp.net-4.0

我有一个奇怪的问题,我的网页上的4个自定义验证器之一没有触发。根据工作验证器,一切看起来都是正确的。以下是简化代码。

ASPX代码 -

<asp:TextBox ID="CMT_TXT" runat="server" Columns="60" Rows="8"
     TextMode="MultiLine" Text='<%#Eval("CMT_TXT")%>'></asp:TextBox><br />
<asp:CustomValidator ID="csvCMT_TXT" runat="server" ControlToValidate="CMT_TXT"
    Display="Dynamic" EnableClientScript="False" ErrorMessage="Msg">
    </asp:CustomValidator>

VB代码 -

 Public Sub csvCMT_TXT_ServerValidate(source As Object,
                                   args As ServerValidateEventArgs) _
    Handles csvCMT_TXT.ServerValidate

    dim s As String = CMT_TXT.Text
    args.IsValid = s.Length <= 3500
End Sub

测试时,

  • 字段CMT_TXT的内容大约有3000个字符。所以这不是空场问题。
  • Page.Validate在代码的主体中被调用

4 个答案:

答案 0 :(得分:1)

要启动服务器端验证,您需要调用Page.Validate,这应该触发所有服务器端验证并更新Page.IsValid

此外,您似乎没有在自定义val上设置事件。可能想要添加prop OnServerValidate

OnServerValidate="csvCMT_TXT_ServerValidate"


<asp:CustomValidator ID="csvCMT_TXT" runat="server" ControlToValidate="CMT_TXT"
    Display="Dynamic" EnableClientScript="False" ErrorMessage="Msg" OnServerValidate="csvCMT_TXT_ServerValidate">
</asp:CustomValidator>

答案 1 :(得分:0)

我对VB.NET不太熟悉,但在使用C#之后,我会检查Page.IsValid字段,然后再继续使用CustomValidator的页面。

在最后阶段,Wizard控件包含CustomValidator的示例,我将在FinishButtonClick事件中检查此值。

protected void Wizard1_FinishButtonClick(object sender, WizardNavigationEventArgs e)
{
    if (Page.IsValid == false)
    {
        // validator failed, stop wizard from continuing
        return;
    }

    // page is valid, continue on
    // ...
}

不确定VB.NET是否存在任何差异,但可能值得一试

答案 2 :(得分:0)

乍一看,您似乎错误地命名了您的处理程序。控制ID为csvCMT_TXT,而处理程序为csv_CMT_TXT.ServerValidate。处理程序中有一个额外的_

答案 3 :(得分:0)

问题证明是VS2010项目构建的一个问题。

对此问题,我不得不

  1. 删除了BIN目录中的所有文件
  2. 删除了OBJ目录中的所有文件
  3. 已删除自定义验证程序
  4. 重建项目
  5. 将自定义验证添加回程序。将原始代码添加回程序
  6. 这有点极端,但这是解决问题的方法。