如果所有文本框都为空,如何隐藏它们

时间:2014-12-17 15:00:30

标签: c# asp.net

我只是想知道。 我有一系列if语句检查

  

如果我传递SQL后文本框为空(或有结果字符串)   结果到那时

if (IncidentData.Tables[0].Rows[0]["Property Category"].ToString() 
                                                     == "RoadVehicle") 
{ 
   lbl_alarmOperated.Visible = false; tb_alarmOperated.Visible = false; 
} 
else 
{ 
   lbl_alarmOperated.Visible = true;
   tb_alarmOperated.Visible = true; 
}

我一直在研究控件,看看我是否可以对所有文本框进行检查,如果它们是空的则隐藏它们(而不是编写if语句的加载)

我现在有这个:

public void ChecknHide()
{
    HideTextBoxes(this);
}

protected void HideTextBoxes(Control ctrl)
{
    foreach (var c in ctrl.Controls)
    {
        if (c is TextBox) ((TextBox)c).Text = String.Empty;
        {
            ((TextBox)c).Visible = false;
        }
    }        
}

它主要是通过阅读帖子放在一起的。但我遇到了一个问题。当我编译并去查看页面时,我得到了这个:

  

无法将“ASP.masterpage_master”类型的对象强制转换为类型   'System.Web.UI.WebControls.TextBox'。

任何想法都出错了?

3 个答案:

答案 0 :(得分:1)

if之后的陈述不是条件的一部分。这会导致所有控件都转换为TextBox。您应该能够像这样修复它:

protected void HideTextBoxes(Control ctrl)
{
    foreach (var c in ctrl.Controls)
    {
        if (c is TextBox && ((TextBox)c).Text == String.Empty)
        {
            ((TextBox)c).Visible = false;
        }

    }


}

答案 1 :(得分:0)

您正在检查c是否为TextBox,但是然后尝试将c转换为TextBox并将其设置为同一行中的String.Empty,而不管它是否实际上是TextBox。

if (c is TextBox) ((TextBox)c).Text = String.Empty;

答案 2 :(得分:0)

奇怪的代码行:

if (c is TextBox) ((TextBox)c).Text = String.Empty;

尝试类似:

protected void HideTextBoxes(Control ctrl)
{
    //Iterate over controlls
    foreach (var c in ctrl.Controls)
    {
        //Check for Textbox controls with the .Text property equal to Null or Empty.
        if (c is TextBox && string.IsNullOrEmpty(((TextBox)c).Text))
        {
            //Set visibility of Textbox control to invisible.
            ((TextBox)c).Visible = false;
        }
    }
}