2010-11-25 8 views
1

フォームをデフォルトにリセットする少しの機能を書き込もうとしました。したがって、私はページのコントロールにアクセスする必要があります。私はMasterPageを使用しています。おそらく、私はPage.Controlsを介してContolsCollectionにアクセスすることはできません。マスターページの使用中にページコントロールにアクセスする

その解決策はありますか?

答えて

0

:ページは、マスターページののContentPlaceHolder内にあるので、あなたがにFindControl()関数を使用して、任意のコントロールにアクセスすることはできませんので、あなたは次のように再帰を使用して、すべてのコントロールにアクセスすることができ、マスターページを使用することにより

2

マスターページ自体内のContentPlaceHolderは、すべてのページのコントロールが含まれ、 だから、あなたが使用してそれらにアクセスすることができます

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

コードは、このマスターページを継承するすべての子ページに対して実行されていることに留意してくださいしたがって、それらのうちの1つに "btnSubmit"(上記の例)が含まれていない場合、nullが返されます。

ここ
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; 
       } 
      } 
     } 
    } 
+1

ええ、それを使用する前にヌルをチェックしてください。 – Rushino

1

ソリューション:

すべてのコントロールを反復処理して、コントロール自体があることを確認する必要があります。だからあなたはこれを再帰的に行います:

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; 

      } 
     } 
    } 
関連する問題