c# – 在转发器页脚中查找控件,为文本框返回null

c# – 在转发器页脚中查找控件,为文本框返回null,第1张

概述我有两个嵌套的中继器.在嵌套的页脚中,我有文本框和文件上传控件.我能够毫无问题地获得文件上传的实例,但文本框的实例为空,尽管两者都放在页脚中. 这是表示内部转发器的页脚的aspx部分: <FooterTemplate> <tr class="add_comment"> <td>Add comment </td> </ 我有两个嵌套的中继器.在嵌套的页脚中,我有文本框和文件上传控件.我能够毫无问题地获得文件上传的实例,但文本框的实例为空,尽管两者都放在页脚中.

这是表示内部转发器的页脚的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所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1231802.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-06
下一篇 2022-06-06

发表评论

登录后才能评论

评论列表(0条)

保存