1

我使用此 EditTemplate 在 UpdatePanel 中获得了 Gridview:

<edititemtemplate>
    <asp:textbox id="txtDistFrom" runat="server" text='<%# Bind("distFrom") %>' width="30" />
    <asp:CustomValidator ID="valDistFrom" ValidateEmptyText="True" OnServerValidate="valDistFromTo_ServerValidate" ControlToValidate="txtDistFrom" Text="Missing" ToolTip="Invalid" Display="Dynamic" runat="server" />
</edititemtemplate>

还有一个简单的服务器端功能:

Protected Sub valDistFromTo_ServerValidate(ByVal source As Object, ByVal args As System.Web.UI.WebControls.ServerValidateEventArgs)
    Dim cv As CustomValidator = CType(source, CustomValidator)
    Dim gvr As GridViewRow = cv.NamingContainer
    Dim tbV As UI.WebControls.TextBox = gvr.FindControl("txtDistFrom")
    If tbV.Text <> "" Then
        args.IsValid = False
        cv.ErrorMessage = "inhalt ist " & tbV.Text
    End If
End Sub

但是在调试此代码时,无论它做什么,都不会触发服务器端功能。它似乎与gridview有关,所以我不能直接通过它的id访问控件。有什么建议么?

4

5 回答 5

1

在这种情况下,您可以使用必填字段验证器。在网格中应该可以正常工作。

对于服务器端验证,我会将自定义验证器完全移出网格并将 ControlToValidate 属性留空。您可以将验证移至网格的 RowUpdating 事件,并在自定义验证器上设置任何错误消息。记得适当地设置验证器的 IsValid 属性。

于 2009-09-09T14:00:11.060 回答
1

如果您将 VB 修改为:

Protected Sub valDistFromTo_ServerValidate(ByVal source As Object, ByVal args As System.Web.UI.WebControls.ServerValidateEventArgs)
        Dim cv As CustomValidator = CType(source, CustomValidator)
        If args.Value <> "" Then
            args.IsValid = False
            cv.ErrorMessage = "inhalt ist " & args.Value
        End If
End Sub

它应该工作。请注意,我使用的是 args.Value。我在 EditTemplates 中使用 CustomValidators 和 TextBox ,并将 ControlToValidate 设置为 TextBox ID 并且它一直有效,但您无法按照您尝试的方式获取 TextBox 对象。我认为这比TGnat 的回答中所建议的搞乱 RowUpdating 事件要简单得多,而且要干净得多。

于 2009-09-09T21:19:53.820 回答
0

I also tend to think that ControlToValidate is the problem. .NET changes the ID of that control at runtime and the custom validator probably isn't picking it up.

I would try adding the customvalidator on RowCreated or RowDatabound using the FindControl()

于 2009-09-09T14:26:36.653 回答
0

我有同样的问题。当我在我的 customvalidator 中明确设置此属性时,服务器端代码触发:

    EnableClientScript="false"
于 2012-03-05T21:25:14.633 回答
0

问题与 ControlToValidate 属性有关,因为您的文本框的 ID 未用于重复元素,如 GridView、ListView 和 Repeater。换句话说:您偶然发现了 ASP.NET 引擎的限制。

不过,我不确定如何解决这个问题。您可以通过将方法附加到 GridView 的 OnRowBound 方法以编程方式添加 CustomValidator 来做到这一点。

本文可能会提供答案 本文可能会提供答案:Integrating Asp.Net Validation Controls with GridView at run-time

于 2009-09-09T10:51:06.097 回答