findControl в контейнере Naming (веб-форма Asp.net C#)

У меня проблема с методом findControl в контейнере именования. Это не первая проблема, и я хотел бы понять теорию. Я нашел много решений на сайте, но ничего не работает

У меня есть DetailsView, который содержит элементы управления. Я ставлю DefaultMode "Вставить" и добавляю 2 радио кнопки

<asp:DetailsView ID="DetailsView1" runat="server"
        ItemType="[...]"
        DefaultMode="Insert"
        [...]">
        <Fields>
            <asp:TemplateField>
                <InsertItemTemplate>
                    <asp:Panel ID="Panel1" runat="server" GroupingText="Create or Select">
                        <div class="Select">
                            <asp:RadioButton ID="RB_Select" runat="server" Text="Select" Checked="True" AutoPostBack="true" OnCheckedChanged ="RB_Select_CheckedChanged" />
                            <asp:DropDownList runat="server" ID="DDL_Select"
                                ItemType="[...]"
                                [...]
                                AutoPostBack="true">
                            </asp:DropDownList>
                        </div>
                        <div class="New">
                            <asp:RadioButton ID="RB_New" runat="server" Text="New" Checked="false" AutoPostBack="true" OnCheckedChanged="RB_New_CheckedChanged" />
                            <asp:TextBox ID="TXB_New" runat="server" Enabled="false" Text="<%# BindItem.Label %>"></asp:TextBox>
                        </div>
                    </asp:Panel>
                </InsertItemTemplate>
          </asp:TemplateField>
      </Fields>
</asp:DetailsView>

И для примера в моем коде, я просто хочу проверить, является ли кнопка радио проверена или нет:

protected void RB_New_CheckedChanged(object sender, EventArgs e)
{
        var RadioButtonNew = (RadioButton)FindControl("RB_New");
        var RadioButtonSelect = (RadioButton)FindControl("RB_Select");

        RadioButtonSelect.Checked = !RadioButtonNew.Checked;
}

И у меня есть "System.NullReferenceException", потому что он не находит мои элементы управления.

Почему он не распознает мои элементы управления? И как с этим бороться?

заранее спасибо

2 ответа

Ты используешь FindControl на уровне страницы. Но элементы управления находятся внутри DetailsView, поэтому сначала вам нужно получить к ним доступ.

TextBox tb = DetailsView1.FindControl("TXB_New") as TextBox;

//or

var RadioButtonSelect = (RadioButton)DetailsView1.FindControl("RB_Select");

Еще раз спасибо, я нашел решение.

Я не знал, но элемент Panel действовал как контейнер. Я просто добавляю findControl:

var RadioButtonSelect = (RadioButton)DetailsView1.FindControl("Panel1").FindControl("RB_Select");
Другие вопросы по тегам