使用MasterPage时访问页面控件

时间:2010-11-25 10:35:06

标签: c# asp.net collections controls master-pages

我尝试编写一个小函数将表单重置为默认值。因此,我想访问页面的控件。我正在使用MasterPage。也许正因为如此,我无法通过Page.Controls访问ContolsCollection。

任何解决方案?

3 个答案:

答案 0 :(得分:2)

母版页中的ContentPlaceHolder本身包含所有页面的控件, 所以你可以使用以下方式访问它们:

var button = ContentPlaceHolder1.FindControls("btnSubmit") as Button;

请记住,代码将针对继承此母版页的所有子页面运行,因此如果其中一个子页面不包含“btnSubmit”(在上面的示例中),您将获得null。

答案 1 :(得分:1)

通过使用母版页,您无法使用FindControl()函数访问任何控件,因为Page位于母版页的contentPlaceHolder中,因此您可以通过使用递归访问所有控件,如:

   protected void Button1_Click(object sender, EventArgs e)
    {
        ReSetToDefault();
    }

    private void ReSetToDefault()
    {
        ResetControl(this.Page.Controls);
    }

    private void ResetControl(ControlCollection controlCollection)
    {
        foreach (Control con in controlCollection)
        {
            if (con.Controls.Count > 0)
                ResetControl(con.Controls);
            else
            {
                switch (con.GetType().ToString())
                {
                    case "System.Web.UI.WebControls.TextBox":
                        {
                            TextBox txt = con as TextBox;
                            txt.Text = "default value";
                        }
                        break;
                    case "System.Web.UI.WebControls.CheckBox"
                        {
                        }
                        break;
                }
            }
        }
    }

答案 2 :(得分:0)

这里是解决方案:

您必须迭代所有控件并检查它们是否有自己的控件。所以你这样递归:

public void ResetForm(ControlCollection objSiteControls)
    {
        foreach (Control objCurrControl in objSiteControls)
        {
            string strCurrControlName = objCurrControl.GetType().Name;

            if (objCurrControl.HasControls())
            {
                ResetForm(objCurrControl.Controls);
            }

            switch (strCurrControlName)
            {
                case "TextBox":
                    TextBox objTextBoxControl = (TextBox)objCurrControl;
                    objTextBoxControl.Text = string.Empty;
                    break;
                case "DropDownList":
                    DropDownList objDropDownControl = (DropDownList)objCurrControl;
                    objDropDownControl.SelectedIndex = -1;
                    break;
                case "GridView":
                    GridView objGridViewControl = (GridView)objCurrControl;
                    objGridViewControl.SelectedIndex = -1;
                    break;
                case "CheckBox":
                    CheckBox objCheckBoxControl = (CheckBox)objCurrControl;
                    objCheckBoxControl.Checked = false;
                    break;
                case "CheckBoxList":
                    CheckBoxList objCheckBoxListControl = (CheckBoxList)objCurrControl;
                    objCheckBoxListControl.ClearSelection();
                    break;                    
                case "RadioButtonList":
                    RadioButtonList objRadioButtonList = (RadioButtonList)objCurrControl;
                    objRadioButtonList.ClearSelection();
                    break;

            }
        }
    }