Estoy creando un control de servidor que básicamente vincula dos listas desplegables, una para el país y otra para el estado, y actualiza el menú desplegable del estado en el evento indexado seleccionado del país. Sin embargo, no se está publicando. ¿Alguna idea de por qué? Los puntos de bonificación para envolviéndolos en un UpdatePanel (que tienen problemas de representación, tal vez porque no tiene una página para hacer referencia?)ASP.NET/C#: DropDownList SelectedIndexChanged en el control del servidor no activa
Aquí es lo que tengo (con un poco de materia de acceso a datos adicional quitó):
public class StateProv : WebControl
{
public string SelectedCountry;
public string SelectedState;
private DropDownList ddlCountries = new DropDownList();
private DropDownList ddlStates = new DropDownList();
protected override void OnLoad(EventArgs e)
{
base.OnLoad(e);
IList<Country> countries = GetCountryList();
IList<State> states = new List<State>();
if (SelectedCountry != null && SelectedCountry != "")
{
states = GetStateList(GetCountryByShortName(SelectedCountry).CountryShortName);
}
else
{
states.Add(new State { CountryId = 0, Id = 0, StateLabelName = "No states available", StateLongName = "No states available", StateShortName = "" });
}
ddlCountries.DataSource = countries;
ddlCountries.DataTextField = "CountryLongName";
ddlCountries.DataValueField = "CountryShortName";
ddlCountries.SelectedIndexChanged += new EventHandler(ddlCountry_SelectedIndexChanged);
ddlCountries.AutoPostBack = true;
ddlStates.DataSource = states;
ddlStates.DataTextField = "StateLongName";
ddlStates.DataTextField = "StateShortName";
ddlCountries.DataBind();
ddlStates.DataBind();
if (!string.IsNullOrEmpty(SelectedCountry))
{
ddlCountries.SelectedValue = SelectedCountry;
if (!string.IsNullOrEmpty(SelectedState))
{
ddlStates.SelectedValue = SelectedState;
}
}
}
protected override void RenderContents(HtmlTextWriter output)
{
ddlCountries.RenderControl(output);
ddlStates.RenderControl(output);
}
private IList<Country> GetCountryList()
{
//return stuff
}
private IList<State> GetStateList(Country country)
{
//return stuff
}
private IList<State> GetStateList(string countryAbbrev)
{
Country country = GetCountryByShortName(countryAbbrev);
return GetStateList(country);
}
private Country GetCountryByShortName(string countryAbbrev)
{
IList<Country> list = dataAccess.RetrieveQuery<Country>();
//return stuff
}
private IList<State> GetAllStates()
{
//return stuff
}
protected void ddlCountry_SelectedIndexChanged(object sender, EventArgs e)
{
IList<State> states = GetStateList(GetCountryList()[((DropDownList)sender).SelectedIndex]);
ddlStates.DataSource = states;
ddlStates.DataBind();
}
}
Editar: Viewstate está en la página, y otros controles en la página realizan devoluciones de datos correctamente, simplemente esto no.
Probablemente no cuenta como una respuesta, pero el Ajax Control Toolkit proporciona lo que ya quiere dentro de un panel de actualización: http://www.asp.net/AJAX/AjaxControlToolkit/Samples/CascadingDropDown/CascadingDropDown.aspx – Sean
Sí; Sin embargo, he renunciado al ACT para siempre. Absoluta basura IMO; De hecho, estoy creando un reemplazo para mi proyecto, ya que solo podíamos lograr que el control CCD funcionara con un servicio web, lo que tenía otras implicaciones. –