为什么这个CustomValidator不会触发?

时间:2009-11-17 09:03:31

标签: asp.net custom-controls

public sealed class IntegerBox : TextBox
{
    #region constants

    private const string RangeConstraintValidatorID = "rangeConstraintValidator";

    #endregion

    #region child controls

    private readonly CustomValidator _rangeConstraintValidator = new CustomValidator
    {
        EnableClientScript = false,
        Enabled = true,
        ErrorMessage = "ErrorMessageForRangeConstraintFailed",
        Display = ValidatorDisplay.None,
        SetFocusOnError = true,
        ValidateEmptyText = true
    };

    #endregion

    #region life cycle

    protected override void CreateChildControls()
    {
        this.Controls.Clear();

        this._rangeConstraintValidator.ID = this.ClientID + this.ClientIDSeparator + RangeConstraintValidatorID;
        this._rangeConstraintValidator.ServerValidate += this.ValidateRangeConstraint;

        this.Controls.Add(this._rangeConstraintValidator);

        base.CreateChildControls();
    }

    #endregion

    /// <summary>
    /// Gets or sets the number.
    /// </summary>
    /// <value>The number.</value>
    public int? Number
    {
        get
        {
            /* MAGIC */
        }
        set
        {
            /* MAGIC */
        }
    }

    public override string ValidationGroup
    {
        get
        {
            this.EnsureChildControls();
            return base.ValidationGroup;
        }
        set
        {
            this.EnsureChildControls();
            base.ValidationGroup = value;
            this._rangeConstraintValidator.ValidationGroup = value;
        }
    }

    public int? MaximumValue { get; set; }
    public int? MinimumValue { get; set; }
    public string ErrorMessageForRangeConstraintFailed
    {
        get
        {
            this.EnsureChildControls();
            return this._rangeConstraintValidator.ErrorMessage;
        }
        set
        {
            this.EnsureChildControls();
            this._rangeConstraintValidator.ErrorMessage = value;
        }
    }

    public void ValidateRangeConstraint(object source, ServerValidateEventArgs args)
    {
        /* MAGIC */
    }

    #endregion
}
谁能告诉我,为什么这不起作用? 注意到:

  • 我已经尝试在CreateChildControls中实现rangeConstraint-Validator =无效!
  • 验证方法未被破坏
  • 如果我没有设置validationGroup
  • ,则只会发生“非触发”

1 个答案:

答案 0 :(得分:1)

溶液:

protected override void OnLoad(System.EventArgs e)
{
    base.OnLoad(e);
    this.EnsureChildControls();
}

为什么?
因为我没有设置validationGroup,所以this.EnsureChildControls()将不会被调用,除非我在OnLoad

调用它