【问题标题】:How Do I Get a Dynamic Control's Value after Postback?回发后如何获取动态控件的值?
【发布时间】:2009-11-17 03:50:39
【问题描述】:

我有一个在 ItemDataBound 事件中添加控件的列表视图。当回发发生时,我找不到新控件。经过一番研究,我发现 ASP .NET 每次都需要创建这些控件,即使在回发之后也是如此。从那里我移动了函数以将 ListView 绑定到 if (!Page.IsPostBack) 条件之外。现在我得到了动态控件的值,但我拥有的静态控件设置为默认值。这是我想要完成的一个示例:

为简洁起见,我在此示例中省略了一些明显的内容。

<asp:ListView runat="server" ID="MyList" OnItemDataBound="MyList_ItemDataBound">
    <LayoutTemplate>
        <asp:PlaceHolder runat="server" ID="itemPlaceholder" />
    </LayoutTemplate>

    <ItemTemplate>
        <asp:PlaceHolder runat="server" ID="ProductPlaceHolder">
            <asp:TextBox runat="server" ID="StaticField" Text="DefaultText" />
            <asp:PlaceHolder ID="DynamicItems" runat="server" />
        </asp:PlaceHolder>           
    </ItemTemplate>
</asp:ListView>

这里是代码隐藏:

protected void MyList_ItemDataBound(object sender, System.Web.UI.WebControls.ListViewItemEventArgs e) {
    PlaceHolder DynamicItems = (PlaceHolder)e.Item.FindControl("DynamicItems");
    DynamicItems.Controls.Add(textbox);
}

所以,就像我说的,如果我只在Page != PostBack 时进行数据绑定,那么我在回发时找不到我的动态控件。如果我每次加载页面时都绑定,那么我的静态字段将设置为其默认文本。

【问题讨论】:

  • 你试过查找控制功能吗?

标签: c# asp.net asp.net-2.0 postback dynamic-controls


【解决方案1】:

尝试将 ListView 的数据绑定移动到 OnInit() 事件中。

【讨论】:

  • 哇,这个效果很好。你能解释一下这背后的原因吗?我不明白为什么只是将它移到 page_init 来解决这个问题。
【解决方案2】:

Very similar question(不是填充 ListView,而是生成一组按钮)。简而言之,您会发现您必须将项目存储在 Viestate 的列表中 - 而不是在 Postback 中将其取出并重新填充列表。

请注意,此解决方案意味着放弃数据绑定(出于其他原因,您可能不想这样做)。

希望对你有帮助。

【讨论】:

  • 是的,但控件是在列表视图数据绑定时创建的。如果我在回发后绑定列表视图,我可能会得到我的动态控件,但我的静态控件会设置为它们的默认值。
  • 我建议完全放弃数据绑定 - 我的回答不清楚,我会在一分钟内进行编辑。如果您有数据源,您可以轻松地自行迭代和创建控件。
猜你喜欢
  • 1970-01-01
  • 2011-07-22
  • 2013-03-03
  • 2015-09-01
  • 1970-01-01
  • 2013-03-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多