Передать контроль методу

Я пытаюсь создать метод, который будет проверять любой элемент управления TextBox, переданный ему.

Вот что у меня так далеко:

Пользовательский валидатор

protected void CustomValidatorDelLN_ServerValidate(object sender, ServerValidateEventArgs args)
    {
        CustomValidator ThisValidator = sender as CustomValidator;
        TextBox MyBox = FindControl(ThisValidator.ControlToValidate) as TextBox;

        args.IsValid = isValid(MyBox);
    }

Метод проверки

protected bool isValid(System.Web.UI.WebControls.TextBox MyBox)
    {
        bool is_valid = MyBox.Text != "";
        MyBox.BackColor = is_valid ? System.Drawing.Color.White : System.Drawing.Color.LightPink;
        return is_valid;
    }

Код компилируется нормально, но я получаю

Исключение NullReferenceException не было обработано кодом пользователя

на

bool is_valid = MyBox.Text != "";

Когда я запускаю проверку.

Я знаю, что я близко (ну, я думаю, что я), но где я иду не так?

4 ответа

Решение

Ваша проблема заключается в FindControl() метод не рекурсивный, поэтому MyBox нулевой. Вам придется написать рекурсивный FindControl() метод, подобный приведенному здесь, если вы хотите, чтобы он работал правильно.

Вы, вероятно, также хотите проверить, если MyBox имеет значение null и возвращает метод, если он есть.

Сначала вы должны проверить, что сам объект существует, после приведения:

bool is_valid = MyBox != null;

и после этого вы можете проверить его текстовое свойство

Для полноты кода этот код помог мне:

protected void CustomValidatorDelLN_ServerValidate(object sender, ServerValidateEventArgs args)
    {
        args.IsValid = isValid(txtDeliveryLastName);
    }

    protected bool isValid(System.Web.UI.WebControls.TextBox MyBox)
    {
        bool is_valid = MyBox.Text != "";
        MyBox.BackColor = is_valid ? System.Drawing.Color.White : System.Drawing.Color.LightPink;
        return is_valid;
    }

Вы пытаетесь проверить пустое текстовое поле. Вы не можете проверить пустую строку.

Другие вопросы по тегам