这是表示内部转发器的页脚的aspx部分:
<FooterTemplate> <tr > <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 > <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); }}总结
以上是内存溢出为你收集整理的c# – 在转发器页脚中查找控件,为文本框返回null全部内容,希望文章能够帮你解决c# – 在转发器页脚中查找控件,为文本框返回null所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)