【问题标题】:RequiredFieldValidators on a custom composite control自定义复合控件上的 RequiredFieldValidators
【发布时间】:2012-08-18 00:47:35
【问题描述】:

我设计了一个自定义复合控件。为简单起见,假设它看起来像这样:

Public Class MyCustomControl
    Inherits CompositeControl

Private _textbox As TextBox

Public Property Text As String
    Get
        EnsureChildControls()
        Return _textbox.Text
    End Get
    Set(value As String)
        EnsureChildControls()
        _textbox.Text = value
    End Set
End Property

Protected Overrides Sub CreateChildControls()
    _textbox = New TextBox() With {.ID = "textbox"}
    Controls.Add(_textbox)
End Sub

现在我试图让MyCustomControl 的消费者使用RequiredFieldValidator 以确保在提交表单时(在客户端)填写内部_textbox。

我尝试过的:

  • 将<ValidationProperty("Text")> 添加到MyCustomControl 类并在RequiredFieldValidator 上使用ControlToValidate="customControlID"(请参阅here)
  • 通过ControlToValidate="customControlID:textbox" 和ControlToValidate="customControlID_textbox" 直接附加验证器
  • 为MyCustomControl 添加了一个IsRequired 属性,该属性将它自己的RequiredFieldValidator 添加为带有.ControlToValidate = _textbox.ID 的子控件

第三种方法似乎确实有效(有一些我尚未调查的 javascript 错误),但我真的希望第一种方法有效(使用 ValidationProperty 属性)。

TLDR:有什么方法可以使用ValidationProperty 属性在自定义复合控件上实现客户端验证?

【问题讨论】:

    标签: asp.net vb.net validation user-controls


    【解决方案1】:

    您的代码可以使用 ValidationProperty 属性(至少是运行 VS 2010 的简化版本)。确保您已定义 RequiredFieldValidator 的 Text 属性,以便在该字段无效时实际显示一条消息。

    根据关于验证摘要的评论进行编辑:

    确认您的 ValidationGroup 属性已为您的 RequiredFieldValidator、ValidationSummary 以及将触发回帖的控件设置(并且相同)。

    【讨论】:

    • 我使用ValidationSummary 以及RequiredFieldValidator 的ErrorMessage 属性来显示错误。当我提交页面时,无论文本框的值如何,它都会通过。
    • 查看此 SO 链接,可能是您的问题:stackoverflow.com/questions/9677883/…
    • 如果我在没有复合控件的普通input type="text" 框上使用相同的RequiredFieldValidator,验证摘要工作正常。
    • 您发布的代码有效。当我添加 ValidationSummary 时它失败了,但是当我将 ValidationGroup 属性添加到 CompositeControl、ValidationSummary 和我为测试而制作的按钮时,它又可以工作了。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-03
    • 2010-09-06
    相关资源
    最近更新 更多