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成员资格
热点阅读