FindControl возвращает нулевую ссылку

У меня есть два текстовых поля, и я использую FindControl() для доступа к ним:

<tr>
        <td align="right">
            <asp:Label ID="LastNameLabel" AssociatedControlID="LastName" runat="server" /></td>
        <td>
            <asp:TextBox ID="LastName" runat="server"></asp:TextBox>
            <asp:RequiredFieldValidator ID="LastNameRequired" runat="server" ControlToValidate="LastName" Display="Dynamic"></asp:RequiredFieldValidator></td>
    </tr>
    <tr>
        <td align="right">
            <asp:Label ID="PrimaryCompanyLabel" AssociatedControlID="PrimaryCompany" runat="server" /></td>
        <td>
            <asp:TextBox ID="PrimaryCompany" runat="server"></asp:TextBox>
            <asp:RequiredFieldValidator ID="PrimaryCompanyRequired" runat="server" ControlToValidate="PrimaryCompany" Display="Dynamic"></asp:RequiredFieldValidator></td>
    </tr>

Доступ к текстовому полю LastName осуществляется нормально, но второе, PrimaryCompany, возвращает пустую ссылку

Доступ к ним получают:

private IEditableTextControl _txtLastName;
    protected IEditableTextControl txtLastName
    {
        get
        {
            if (_txtLastName == null)
            {
                _txtLastName = (IEditableTextControl)this.CreateUserStep.ContentTemplateContainer.FindControl("LastName");
            }
            return _txtLastName;
        }
    }

private IEditableTextControl _txtPrimaryCompany;
    protected IEditableTextControl txtPrimaryCompany
    {
        get
        {
            if (_txtPrimaryCompany == null)
            {
                _txtPrimaryCompany = (IEditableTextControl)this.CompleteStep.ContentTemplateContainer.FindControl("PrimaryCompany");
            }

            return _txtPrimaryCompany;
        }
    }

Этот код взят из пакета FBAPack SharePoint2013 в CodePlex. Поле LastName встроено, а поле PrimaryCompany добавляется мной.

Я показываю только эту часть кода, так как здесь выбрасывается null reference. Я что-то пропустил?


person Nathan    schedule 12.08.2014    source источник
comment
Вы найдете их в разных контейнерах: CreateUserStep и CompleteStep.   -  person Der_Meister    schedule 12.08.2014


Ответы (2)


Вы уверены, что именно здесь выбрасывается нулевая ссылка? У вас есть номер строки? Здесь элемент управления фактически проверяется на нуль.

Я предполагаю, что на самом деле это происходит в другом месте кода, потому что свойство .Text равно null. Например, если вы делаете что-то вроде:

txtPrimaryCompany.Text.Trim()

person Chris Coulson    schedule 13.08.2014

По какой-то причине IEditableTextControl не работает с полем, которое я создал. Вместо этого я использовал TextBox, и это сработало.

person Nathan    schedule 16.08.2014