asp.net – 获取ListView中动态添加的控件的值
发布时间:2020-12-16 09:58:48  所属栏目:asp.Net  来源:网络整理 
            导读:我在ListView中获取动态创建的控件的输入值时遇到问题. 这是我的ListView: asp:ListView ID="lvQuestions" runat="server" DataKeyNames="ProductQuestionId" onitemdatabound="lvQuestions_ItemDataBound" LayoutTemplate table tr runat="server" id="ite
                
                
                
            | 
                         
 我在ListView中获取动态创建的控件的输入值时遇到问题. 
  
  
这是我的ListView: <asp:ListView ID="lvQuestions" runat="server" DataKeyNames="ProductQuestionId" onitemdatabound="lvQuestions_ItemDataBound">
    <LayoutTemplate>
        <table>
            <tr runat="server" id="itemPlaceholder"></tr>
        </table>
    </LayoutTemplate>
    <ItemTemplate>
            <tr>
                <td><%# Eval("Question") %></td>
                <td>
                    <asp:PlaceHolder ID="plControl" runat="server" />
                    <asp:HiddenField ID="hfQuestionId" runat="server" />
                </td>
            </tr>
    </ItemTemplate>        
</asp:ListView>
<asp:Button ID="btnSubmit" runat="server" Text="Submit" onclick="btnSubmit_Click" /> 
 在我的ItemDataBound处理程序中,我将一个TextBox或其他控件添加到占位符.控件类型取决于项目,但为了保持简单,我们假设它始终是一个文本框.控件的ID也是动态的. // create a textbox control TextBox txtbx = new TextBox(); txtbx.ID = "txtQuestion_" + productQuestionId.ToString(); //productQuestionId is the datakey value of this ListViewItem placeholder.Controls.Add(txtbx); 当用户点击按钮时,我需要能够获得他们填写的值. 在我的研究中,我发现我需要首先重新创建动态添加的控件,以便根据页面生命周期获取它们的值. 以下是我在按钮处理程序中重新创建控件的内容: foreach (ListViewDataItem item in lvQuestions.Items)
    {
        HiddenField hdField = (HiddenField)item.FindControl("hfQuestionId");
        PlaceHolder plcHolder = (PlaceHolder)item.FindControl("plControl");
        TextBox txtbx = new TextBox();
        txtbx.ID = "txtQuestion_" + hdField.Value;
        plcHolder.Controls.Add(txtbx);
    } 
 然后在同一个处理程序中的下一个代码块我重新遍历ListViewDataItems并找到控件: foreach (ListViewDataItem item in lvQuestions.Items)
    {
        HiddenField hdField = (HiddenField)item.FindControl("hfQuestionId");
        PlaceHolder plcHolder = (PlaceHolder)item.FindControl("plControl");
        TextBox txtbx = (TextBox)plcHolder.FindControl("txtQuestion_" + hdField.Value);
        if (txtbx != null)
        {
            Response.Write("TextBox Found:" + txtbx.Text);
        }
    } 
 找到了文本框,但没有任何价值.这就像我刚刚在上一个块中用新的文本框写了一样.如果我删除前一段代码,则找不到任何文本框. 有人可以帮我解决一下我在这里缺少的东西吗? 谢谢. 解决方法
 正如您已经发现的那样,这是一个生命周期问题.尝试在 
 ListView.ItemCreated事件中创建动态控件,而不是ListView.ItemDataBound事件.
 
        (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!  | 
                  
相关内容
- asp.net弹出提示信息的几种方式
 - ASP.NET MVP vs ASP.NET MVC
 - abp demo运行1
 - IIS6中经典ASP的会话状态和垃圾回收
 - asp.net – recaptcha https问题https://api-secure.recapt
 - asp.net-webpages – Razor代码块使用
 - asp.net-mvc – 在MVC应用程序中使用ELMAH调试/跟踪消息
 - asp.net-mvc – 便携式区域与多个项目区域?
 - asp.net-mvc – 带网格的MVC3 Bootstrap tablular数据
 - asp.net-mvc-3 – 如何在Asp.Net Mvc 3中显示自定义错误页面
 
推荐文章
            站长推荐
            - asp.net-mvc – 在ASP.NET MVC应用程序中测试Aut
 - asp.net-mvc – OnValidateIdentity会话为空 –
 - asp.net-mvc – 将Castle Windsor与SignalR集成
 - asp-classic – 在常规ASP中关闭SQL连接
 - asp.net – 带有Windows身份验证的User.Identity
 - .NET Web应用中为什么要使用async/await异步编程
 - asp.net – 我可以使用一种模式来编辑MVC3应用程
 - 10.1.翻译系列:EF 6中的实体映射【EF 6 Code-Fi
 - asp.net-core – asp.net核心会话不是用户特定的
 - 单元测试Raven和ASP.NET成员资格
 
热点阅读
            