Доступ к элементам управления страницы при использовании MasterPage - PullRequest
1 голос
/ 25 ноября 2010

Я попытался написать небольшую функцию для сброса формы по умолчанию. Поэтому я хочу получить доступ к элементам управления страницы. Я использую MasterPage. Возможно из-за этого у меня нет доступа к ContolsCollection через Page.Controls.

Какие-нибудь решения для этого?

Ответы [ 3 ]

2 голосов
/ 25 ноября 2010

ContentPlaceHolder внутри самой главной страницы содержит все элементы управления страницы, поэтому вы можете получить к ним доступ, используя:

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

Имейте в виду, что код будет работать для всех дочерних страниц, которые наследуют эту главную страницу, так что если один из них не содержит «btnSubmit» (в приведенном выше примере), вы получите null.

1 голос
/ 25 ноября 2010

При использовании главной страницы вы не можете получить доступ к какому-либо элементу управления с помощью функции 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;
                }
            }
        }
    }
0 голосов
/ 29 ноября 2010

Вот решение:

Вам нужно перебрать все элементы управления и проверить, есть ли у них элементы управления.Итак, вы делаете это рекурсивно:

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;

            }
        }
    }
...