SharePoint: Add ‘onchange’-attribute to DropDownChoiceField
To change the values of controls logically connected to DropDownChoiceField, I decided to add a client-side JavaScript handler that fires when selected value of DropDownChoiceField is changed. Unfortunately, DropDownChoiceField doesn’t have a habitual collection of attributes. But DropDownChoiceField is a template control and contains DropDownList inside, which allows to add attributes. We need to extract DropDownList from DropDownChoiceField and process it. I think the better way to do that is the Page_PreRender or similar methods, because all child controls of DropDownChoiceField are already created by this moment. According to Reflector, the id of DropDownList is “DropDownChoice”. To get control I use recursive FindControl function.
protected DropDownChoiceField choiceField;
//..............
protected void Page_PreRender(object sender, EventArgs e)
{
DropDownList ddl = FindControlRecursive(choiceField, "DropDownChoice") as DropDownList;
if (ddl != null)
ddl.Attributes.Add("onchange", "javascript:alert('Hello')");
}
public static Control FindControlRecursive(Control root, string id)
{
if (root.ID == id)
return root;
foreach (Control c in root.Controls)
{
Control t = FindControlRecursive(c, id);
if (t != null)
return t;
}
return null;
}