【问题标题】:Event not firing as expected for control in formview asp.net事件未按预期触发 formview asp.net 中的控件
【发布时间】:2013-06-27 16:41:03
【问题描述】:

我在 InsertItemTemplate 中有一个 LinkBut​​ton,当单击它时,应在 InsertItemTemplate 中显示一个隐藏的 DropDownList。但是,它似乎不起作用,但它会说,当单击 LinkBut​​ton 时,更改 Formview 之外的标签文本。该事件正在触发,但使 DropDownList 在 InsertItemTemplate 中可见的部分没有做任何事情。代码如下:

.aspx:

<asp:FormView ID="formViewNewRecord" runat="server">
        <InsertItemTemplate>
            <asp:DropDownList ID="ddlAddSelection2" runat="server" DataSourceID="dSource1" DataTextField="Users"  DataValueField="Users" AppendDataBoundItems="true" Visible="false">
                <asp:ListItem></asp:ListItem>
            </asp:DropDownList>
            <asp:LinkButton runat="server" ID="lbAddAnother" OnClick="lbAddAnother_Click">+Add Another</asp:LinkButton>
        </InsertItemTemplate>
        </asp:FormView>

    <asp:Label ID="Label2" runat="server" Text="Label"></asp:Label>

C#:

protected void lbAddAnother_Click(object sender, EventArgs e)
{
    DropDownList addSelection2 = (DropDownList)formViewNewItem.Row.Cells[0].FindControl("ddlAddSelection2");
    addSelection2.Visible = true;
    Label2.Text = addSelection2.ID;
}

【问题讨论】:

    标签: asp.net formview


    【解决方案1】:

    您的下拉控件不是表单视图的直接子项。因此,由于 FindControl 调用不是递归的,因此您必须在表单视图的子控件的正确位置搜索控件。 See this for the details 但在高层次上,您需要以下内容:

    DropDownList ctrl = (DropDownList)FormView1.Row.Cells[0].FindControl("ddlAddSelection2");
    

    之后,您应该检查它是否为 null 以确保安全。

    【讨论】:

    • 嗨@Tombala 我更新了上面的代码。我添加了 .Row.Cells[0],但它仍然无法正常工作。我还添加了标签来显示控件的 ID。单击链接按钮时,标签会显示“ddlAddSelection2”。无论我是保留还是省略 .Row.Cell[0] 部分,它都会发生,但我试图使其可见的控件仍然没有发生。
    • 我会做的是在链接的讨论中也建议的内容:打破该行并使用监视窗口或即时窗口找出您需要的控件在控件树中的位置.然后你可以使用正确的路径来控制你的控件。
    • 如果我的理解正确,您似乎是在暗示 FindControl 只是因为 FindControl() 中使用的路径(控件名称)而没有找到控件。对我来说这没有意义,因为它显示了它在我放置在表单视图之外的标签中找到的控件 ID。如果我输入了不正确的控件名称,例如.FindControl('ddlAddSelection23'),它会给我一个“未设置对象实例的对象引用”。错误。我认为我遇到的这个问题与页面生命周期有关??
    • 只是对此的更新......所以我决定创建一个全新的项目,其中只有一个表单视图、链接按钮和我一直在使用的代码隐藏代码,它工作正常。因此,似乎是某些设置或代码之外的一些设置或代码导致它无法正常工作......:/
    • 为了解决您对控件路径的第一条评论,不,控件 ID 保持不变。我的意思是,除非您在控件的直接父容器上执行“FindControl”方法,否则您将找不到它。找到标签是因为您的标签位于页面的控件集合中。但是下拉列表不是您的 FormView 的直接子项。它是其中一个模板的子级。我仍然会在该行上放置一个断点并查看表单视图的属性并深入到控件集合、行等,直到找到所需的 ctrl。
    猜你喜欢
    • 2016-12-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-02
    • 2016-08-02
    • 2013-08-09
    • 1970-01-01
    相关资源
    最近更新 更多