Почему этот CustomValidator не срабатывает? - PullRequest
0 голосов
/ 17 ноября 2009
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
}

Может кто-нибудь сказать мне, почему это не работает?
Примечания:

  • Я уже пытался создать RangeConstraint-Validator внутри CreateChildControls = без эффекта!
  • метод проверки не нарушен
  • «не стрельба» происходит только, если я не установил validationGroup

1 Ответ

1 голос
/ 17 ноября 2009

решение:

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

почему
так как я не установил validationGroup, this.EnsureChildControls() не будет вызван, пока я не вызову его на OnLoad

...