【问题标题】:findControl in Naming container (Asp.net webform C#)命名容器中的 findControl (Asp.net webform C#)
【发布时间】:2017-11-30 07:45:24
【问题描述】:

我对命名容器中的 findControl 方法有疑问。 这不是第一个麻烦,我想了解这个理论。 我在网站上找到了很多解决方案,但没有任何效果

我有一个包含控件的 DetailsView。 我把 DefaultMode "Insert" 添加了 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”,因为它找不到我的控件。

为什么它不能识别我的控件?又该如何处理呢?

提前致谢

【问题讨论】:

  • 我认为你应该在 DetailView 的 'OnDataBinding' 事件中找到你的 RatioButton 控件。
  • 谢谢,我试了一下,还是有同样的异常。我在 loadFunction、updateItem、getItem、insertItem、OnPreInit 中进行了测试...我认为/我知道这是与我们在页面中调用控件的时刻有关的问题。但我不知道如何补救。

标签: c# asp.net webforms findcontrol naming-containers


【解决方案1】:

您在页面级别使用FindControl。但是控件位于 DetailsView 中,因此您需要先访问它。

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

//or

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

【讨论】:

  • 哦,是的!谢谢你,你是对的。我忘了。但是还是有同样的错误
  • 我已经用你的 sn-p 对其进行了测试,上面的代码有效。但为了测试,我必须手动将 DetailsView 设置为 DetailsViewMode.Insert
  • 真的很奇怪!我尝试在 pageLoad 方法和我的单选按钮方法中添加“DetailsView1.DefaultMode = DetailsViewMode.Insert”,但它不起作用。我没有 contentPanel 或其他上层容器
【解决方案2】:

再次感谢,我找到了解决办法。

我不知道,但 Panel 元素就像一个容器。 我只是添加了一个 findControl :

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

【讨论】:

    猜你喜欢
    • 2021-05-20
    • 1970-01-01
    • 1970-01-01
    • 2013-05-26
    • 1970-01-01
    • 2010-11-23
    • 1970-01-01
    • 1970-01-01
    • 2012-01-29
    相关资源
    最近更新 更多