【问题标题】:Server side customvalidator (asp + vb.net) not firing服务器端 customvalidator (asp + vb.net) 未触发
【发布时间】:2011-08-26 14:06:11
【问题描述】:

我知道这已经被问了很多,但是我有一个服务器端自定义验证器没有被触发,我找不到原因(另外,我复制了从其他地方工作的示例并且无法使其工作...)

代码:

<asp:CustomValidator ID="MyValidator" runat="server" ErrorMessage="My error message" OnServerValidate="MyValidator_OnServerValidate" />

验证函数

    Protected Sub MyValidator_OnServerValidate(ByVal source As Object, ByVal args As System.Web.UI.WebControls.ServerValidateEventArgs) Handles MyValidator.ServerValidate
    Dim i As Integer
    i = 0
    args.IsValid = False
End Sub

这是我正在做的最后一个测试(从其他问题复制),但我也尝试将验证器附加到一个控件(并添加 ValidateEmptyText)并删除 handles MyValidator.ServerValidate 并将其添加到标签onServerValidate.

(我通常是 Java 程序员,所以这可能是我应该看到的一个非常基本的错误,不要低估我的 .Net 无知)

提前致谢

编辑:添加提交按钮的代码...

<asp:Button ID="lbGuardar" runat="server" CssClass="button" Text="Guardar" CausesValidation="true" ></asp:Button>

编辑 2: 在我的按钮代码上添加了 Page.validate(),它不会调用验证器的服务器端。此外,正在调用自定义验证器(至少是它的客户端/javascript 端,但不是服务器端)

【问题讨论】:

    标签: .net vb.net validation customvalidator


    【解决方案1】:

    想来想去,我会尝试将 Protected Sub 更改为 Public Sub。

    编辑:我刚刚测试了您的代码以及您的代码对我有用。我进入 Debug 并单击了一个按钮,该按钮返回它首先进入 MyValidator.ServerValidate 的位置,这是应该的。它使页面无效并显示错误消息。

    【讨论】:

    • 可能是我缺少一些额外的配置?视觉工作室是否可能没有更改某些基础文件?
    • 不确定。您的页面声明是什么样的?我运行的测试有&lt;%@ Page Language="VB" AutoEventWireup="true" CodeBehind="TestPage.aspx.vb" Inherits="TestApp.TestPage" %&gt;
    • &lt;%@ Control Language="vb" AutoEventWireup="false" CodeBehind="ucAltaCliente.ascx.vb" Inherits="SGI08.ucAltaCliente" %&gt; 但我已将 AutoEventWireup 更改为 true 并且它也不起作用...如果有帮助,应用程序上的其他 requiredvalidators 确实有效...
    • 尝试另一个页面。只需创建一个测试页面并使用相同的代码。有时我发现如果创建一个新页面并将旧页面复制/粘贴到新页面中,它会修复类似的奇怪错误。
    • 没用...我还删除了对验证器的所有引用,添加了一些 requiredfieldvalidator 并且它们起作用了,但是当我添加 customvalidator 时它们不起作用...
    【解决方案2】:

    应该是公共方法,不需要句柄。

    Public Sub MyValidator_OnServerValidate(ByVal source As Object, ByVal args As System.Web.UI.WebControls.ServerValidateEventArgs)
    
        Dim i As Integer
        i = 0
        args.IsValid = False
    
    End Sub
    

    【讨论】:

    • 以什么方式不起作用。如果您在方法上设置断点,会触发,还是根本达不到?
    • 它没有到达onServerValidate 内的断点。这很奇怪,因为如果我添加一个客户端验证,它会被调用,但服务器验证不会被调用,即使我以编程方式强制 Page.validate()... [我总是在方法上使用断点进行调试,而且它永远不会到达...]
    • 嗯。您是否尝试过使用另一个自定义验证器创建新的服务器控件以查看该验证器是否触发?就我个人而言,我会尝试从头开始创建一个新项目并做同样的事情,看看是否可行,然后比较差异。
    • 新项目工作...没有发现任何有趣的差异,将继续搜索
    【解决方案3】:

    没能成功。移除了自定义验证器,并在逻辑内部进行了验证。

    【讨论】:

      猜你喜欢
      • 2014-07-20
      • 2013-02-27
      • 1970-01-01
      • 2013-11-19
      • 1970-01-01
      • 1970-01-01
      • 2018-03-06
      • 2023-03-05
      • 1970-01-01
      相关资源
      最近更新 更多