ASP.NET访问转发器内部文本框的值

时间:2014-05-24 21:32:56

标签: c# asp.net foreach textbox repeater

我想检查转发器内的文本框值。如果所有文本框都为空,我想将检查值分配给0.我尝试了这个实现,但是我收到了这个错误System.InvalidCastException

            int check = 0;

            foreach (TextBox tb in searchResultRepeater.Items)
            {
             if(tb.Text == ""){
                check = 0;
             }else{
                check = 1;
             }
            }

如何修复此异常?

2 个答案:

答案 0 :(得分:1)

这意味着并非Items集合中的所有对象都是TextBox的实例。 您需要使用定义为更通用的对象的tb运行循环,然后检查循环内部是否tb是TextBox

 foreach(RepeaterItem item in searchResultRepeater.Items){
    for (int i = 0; i < item.Controls.Count; i++) {
        Control ctrl = item.Controls[i];    
        if(ctrl is TextBox){
           TextBox tb = (TextBox) ctrl;
           if (tb.Text != null && tb.Text.Length > 0) {
                        check = 1;
                        break;
           }
        }
   }
   if (check == 1)
       break;
 }

答案 1 :(得分:1)

如果您的searchResultRepeter是一个Repeater,而不是通过TextBoxes循环,那么您应该使用RepeaterItem。您可以检查所有项目是否都是TextBox类型。

    foreach(RepeaterItem item in searchResultRepeater.Items){
        if(item.Controls.Count > 0 && item.Controls[0] is ITextControl ) {
           if(((TextBox)item.Controls[0]).Text.IsNullOrEmpty()){
                check = 1;
                break;
       }
    }