【问题标题】:Listview with Dynamic Controls - Dynamic controls disappear after postback带有动态控件的列表视图 - 回发后动态控件消失
【发布时间】:2011-12-26 17:18:15
【问题描述】:

我有一个从 xml/xslt 加载动态控件的列表视图

 <asp:ListView ID="DynamicFields" runat="server"
          DataSourceID="CustomFields" 
          OnItemDataBound="DynamicFields_ItemDataBound"                                                                              
          GroupItemCount="2" ItemPlaceholderID="itemsGroup" 
          GroupPlaceholderID="itemsGroup">
      <LayoutTemplate>
         <table width="470" border="0" cellpadding="0" cellspacing="10">
             <asp:PlaceHolder ID="itemsGroup" runat="server" />
         </table>
      </LayoutTemplate>
      <GroupTemplate>
         <tr>
             <asp:PlaceHolder runat="server" ID="itemsGroup"></asp:PlaceHolder>
         </tr>
      </GroupTemplate>
      <ItemTemplate>
           <custom:CustomField ID="Field" runat="server" 
              FieldIndex='<%# Eval("index") %>' /> 
      </ItemTemplate>  
      <AlternatingItemTemplate>
           <custom:CustomField ID="Field" runat="server" 
              FieldIndex='<%# Eval("index") %>' />
      </AlternatingItemTemplate>        
</asp:ListView>  

在我的页面代码隐藏中,我正在绑定用户控件属性并调用加载 xml 并创建控件的绑定方法

protected void DynamicFields_ItemDataBound(object sender, ListViewItemEventArgs e)
    {


        if (e.Item.ItemType == ListViewItemType.DataItem)
        {
            ucCustomField uc = (ucCustomField)e.Item.FindControl("Field");
            uc.FileName = FORM_PATH;
            uc.FormName = FORM_NAME;
            uc.LoadXMLFile(); //binding xml content here
        }
    }

我将此列表视图添加到具有静态控件和保存按钮的现有表单中。当我单击按钮时,它会导致验证并向我显示验证摘要弹出消息[预期],并且在我单击弹出窗口中的确定后,我在列表视图中的所有动态控件都会消失。 如何使这些控件以及回发后可能已输入的任何值保持可见?

【问题讨论】:

  • 您有验证事件吗?如果是这样,您能否粘贴该代码,它返回的确切错误是什么?

标签: c# asp.net user-controls custom-controls dynamic-controls


【解决方案1】:

在我的页面代码隐藏中,我正在绑定用户控件属性并调用加载 xml 并创建控件的绑定方法

你能告诉你在哪里调用 Bind/Databind 方法吗?我想把它放在页面加载中会解决这个问题。回发将删除已动态添加到页面的任何内容。

问候, SJ

【讨论】:

    【解决方案2】:

    确保您不在 Header 中不确定这是否有帮助,但请尝试以下操作

    if(e.Item.ItemType == ListItemType.Item 
        || e.Item.ItemType == ListItemType.AlternatingItem)
    {
    }
    

    【讨论】:

    • 我正在使用 Listview,而 ListviewItemType 只有数据项。
    【解决方案3】:

    Page.IsPostback 为真时调用DynamicFields.DataBind() 解决了这个问题

    【讨论】:

      猜你喜欢
      • 2013-03-11
      • 2017-04-14
      • 2018-09-28
      • 1970-01-01
      • 1970-01-01
      • 2011-12-01
      • 1970-01-01
      • 1970-01-01
      • 2013-07-09
      相关资源
      最近更新 更多