我尝试编写一个小函数将表单重置为默认值。因此,我想访问页面的控件。我正在使用MasterPage。也许正因为如此,我无法通过Page.Controls访问ContolsCollection。
任何解决方案?
答案 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;
}
}
}