微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

我有两个嵌套的中继器.在嵌套的页脚中,我有文本框和文件上传控件.我能够毫无问题地获得文件上传的实例,但文本框的实例为空,尽管两者都放在页脚中.

这是表示内部转发器的页脚的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);
            }
}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐