c# – 在转发器页脚中查找控件,为文本框返回null
发布时间:2020-12-15 22:23:50 所属栏目:百科 来源:网络整理
导读:我有两个嵌套的中继器.在嵌套的页脚中,我有文本框和文件上传控件.我能够毫无问题地获得文件上传的实例,但文本框的实例为空,尽管两者都放在页脚中. 这是表示内部转发器的页脚的aspx部分: FooterTemplate tr class="add_comment" tdAdd comment /td /tr tr td
我有两个嵌套的中继器.在嵌套的页脚中,我有文本框和文件上传控件.我能够毫无问题地获得文件上传的实例,但文本框的实例为空,尽管两者都放在页脚中.
这是表示内部转发器的页脚的aspx部分: <FooterTemplate> <tr class="add_comment"> <td>Add comment </td> </tr> <tr> <td> <asp:TextBox runat="server" Columns="20" Rows="3" ID="comment_txt" TextMode="MultiLine" Width="60%" CssClass="new_comment" ViewStateMode="Inherit"></asp:TextBox> </td> </tr> <tr class="add_comment"> <td> <asp:FileUpload ID="uploadImageBtn" runat="server" Text="Add image" OnClick="uploadImage" CssClass="comment_buttons" /> <asp:Button ID="comment_btn" runat="server" OnClick="submitComment" Text="Comment" CssClass="comment_buttons" /> </td> </tr> </table> </FooterTemplate> 这是我试图访问控件的C#代码: protected void commentsRepeater_ItemDataBound(object sender,RepeaterItemEventArgs e) { if ((e.Item.ItemType == ListItemType.Footer )) { Repeater childRepeater = (Repeater)sender; TextBox commentTextBox = (TextBox)e.Item.FindControl("comment_txt"); String postText = commentTextBox.Text.ToString(); FileUpload upFile = (FileUpload)e.Item.FindControl("uploadImageBtn"); } } 运行页面时出现此错误, Object reference not set to an instance of an object 这是由这条线引起的: String postText = commentTextBox.Text.ToString(); 我试图删除文本框代码并只检索上传文件,它工作得很好.问题是访问文本框. 编辑:应该在同一页面中按钮的onclick事件处理程序中访问文本框的访问文本和上传按钮的实例.因此,我已经全局定义了两个值,同时执行Repeater的一些嵌套转发器事件,如ItemDataBound或Adrian Iftode建议的事件,即ItemCreated.然后,在按钮的onclick中我使用它们假设它们具有值,因为嵌入的转发器事件应该在按下按钮之前触发.成功检索上载文件实例,但文本框始终为null. 全局变量声明: TextBox commentTextBox; FileUpload upFile; Repeater childRepeater; String postText; 嵌套转发器事件中的代码: protected void commentsRepeater_ItemCreated(object sender,RepeaterItemEventArgs e) { if ((e.Item.ItemType == ListItemType.Footer)) { childRepeater = (Repeater)sender; commentTextBox = (TextBox)(e.Item.FindControl("comment_txt")); postText = commentTextBox.Text.ToString(); upFile = (FileUpload)e.Item.FindControl("uploadImageBtn"); } } onclick里面的代码: protected void submitComment(object sender,EventArgs e) { Boolean insert = true; if (upFile.HasFile || !String.IsNullOrEmpty(postText)) { //some code. } 只有当upFile有文件时才会执行上面的if语句,postText总是被视为null. 任何人都可以帮助我,是什么原因造成这个错误? 谢谢. 解决方法
在这种情况下,ItemDataBound不是正确的事件,因为页眉和页脚模板未在转发器项中实例化.
正确的事件是ItemCreated protected void rp_ItemCreated(Object sender,RepeaterItemEventArgs e) { if (e.Item.ItemType == ListItemType.Footer) { e.Item.FindControl(ctrl); } if (e.Item.ItemType == ListItemType.Header) { e.Item.FindControl(ctrl); } } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |