【问题标题】:Server Side Custom Validator Not Firing服务器端自定义验证器未触发
【发布时间】:2014-10-14 14:55:17
【问题描述】:

我遇到了一个奇怪的问题,我的网页上的 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

【问题讨论】:

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


    【解决方案1】:

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

    此外,您似乎没有在自定义 val 上设置事件。可能要添加道具 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>
    

    【讨论】:

    • 好点,但这正在完成。我在问题的测试条件中添加了这个调用。很抱歉,如果我造成任何混乱。
    • @photo_tom,我的编辑有帮助吗?看起来事件处理程序没有注册。留在页面部分。为可能遇到此问题的其他人验证。
    【解决方案2】:

    我对 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 是否有任何差异,但可能值得一试

    【讨论】:

      【解决方案3】:

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

      【讨论】:

      • 这是糟糕的一天。您在我的问题中发现了第二个错误。 ARG!!!在我自己。
      【解决方案4】:

      问题原来是VS2010项目构建的问题。

      为了这个问题,我不得不

      1. 删除了 BIN 目录下的所有文件
      2. 已删除 OBJ 目录中的所有文件
      3. 已删除自定义验证器
      4. 重建项目
      5. 将自定义验证重新添加到程序中。将原始代码添加回程序中

      这有点极端,但这是解决问题所需要的。

      【讨论】:

        猜你喜欢
        • 2013-02-27
        • 2010-10-16
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-11-04
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多