Ошибка в элементе управления RequiredFieldValidator

.aspx file:

Почтовый индекс:

<asp:TextBox runat="server" ID="txtPostalCode" CssClass="inputs" /><br />
 <asp:RegularExpressionValidator ID="regPostalCode" runat="server" ErrorMessage="Should be 5 Digits" ControlToValidate="txtPostalCode" ValidationExpression="\d{5}"></asp:RegularExpressionValidator>
<br />
<asp:RequiredFieldValidator ID="RequiredFieldValidator1" runat="server" ControlToValidate="txtPostalCode" 
   Display="Dynamic" EnableClientScript="False" onload="RequiredFieldValidator1_Load"></asp:RequiredFieldValidator>
<asp:CustomValidator ID="CustomValidator1" runat="server" ErrorMessage="Cannot be left blank" 
    Display="Dynamic" ControlToValidate="txtPostalCode" onservervalidate="CustomValidator1_ServerValidate"></asp:CustomValidator>

Файл.aspx.cs:

 protected void RequiredFieldValidator1_Load(object sender, EventArgs e)
{

    if (IsPostBack)
    {
        //get which input TextBox will be validated.
        TextBox tx = (TextBox)this.FindControl(
            RequiredFieldValidator1.ControlToValidate);
        if (string.IsNullOrEmpty(tx.Text))
        {
            RequiredFieldValidator1.ErrorMessage =
                "Required field cannot be left blank.";
        }
    }


}
protected void CustomValidator1_ServerValidate(object source,ServerValidateEventArgs args)
{
    //Test whether the length of the value is more than 6 characters
    if (args.Value.Length <= 5)
    {
        args.IsValid = true;
    }
    else
    {
        args.IsValid = false;
    }
}

Он показывает мне ошибку в строке: if (string.IsNullOrEmpty(tx.Text)) Сведения об исключении: System.NullReferenceException: Ссылка на объект не установлена ​​на экземпляр объекта. Я не уверен, что делать, если кто-то поможет мне в этом, я буду очень благодарен.

2 ответа

Решение

Проблема, скорее всего, связана с FindControl метод не находит текстовое поле. Если вы используете главную страницу, попробуйте использовать рекурсивный метод FindControl, как показано ниже. Для параметра Root вы можете передать this.Masterи Id будет вашим RequiredFieldValidator1.ControlToValidate,

    TextBox tx = (TextBox)FindControlRecursive(this.Master, RequiredFieldValidator1.ControlToValidate);

Recusive FindControl:

    public static Control FindControlRecursive(Control Root, string Id)
    {
        if (Root.ID == Id)
            return Root;

        foreach (Control Ctl in Root.Controls)
        {
            Control FoundCtl = FindControlRecursive(Ctl, Id);
            if (FoundCtl != null)
                return FoundCtl;
        }

        return null;
    }

Ссылка на метод IsNullOrWhiteSpace

http://msdn.microsoft.com/en-us/library/system.string.isnullorwhitespace.aspx

Указывает, является ли указанная строка Nothing, пустой или состоит только из символов пробела.

Вы могли бы сделать что-то вроде этого:

if (String.IsNullOrEmpty (tx.Text) || tx.Text.Trim().Length == 0)

String.IsNullOrEmpty

метод, использованный выше, эквивалентен:

if (tx.Text == null || tx.Text == String.Empty)

Это означает, что вам все еще нужно проверить ваш случай "IsWhiteSpace" с помощью.Trim().Length == 0 в соответствии с примером.

Ссылка на метод IsNullOrEmpty

http://msdn.microsoft.com/en-us/library/system.string.isnullorempty.aspx

Указывает, является ли указанная строка пустой или пустой строкой.

В вашем примере вы хотите убедиться, что ваша строка имеет значение, что означает, что вы хотите обеспечить строку:

  1. Не является нулевым
  2. Не пустая строка (String.Empty / "")
  3. Это не просто пробел
Другие вопросы по тегам