Tôi đang tạo một điều khiển máy chủ về cơ bản liên kết hai danh sách thả xuống, một cho quốc gia và một cho tiểu bang, và cập nhật trạng thái thả xuống sự kiện selectedindexchanged của đất nước. Tuy nhiên, nó không đăng lại. Bất kỳ ý tưởng tại sao? điểm thưởng cho gói chúng trong một UpdatePanel (có vấn đề render, có lẽ bởi vì tôi không có một trang để tham khảo?)ASP.NET/C#: DropDownList SelectedIndexChanged trong điều khiển máy chủ không kích hoạt
Dưới đây là những gì tôi có (với một số công cụ bổ sung truy cập dữ liệu tước ra):
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();
}
}
Chỉnh sửa: Chế độ xem đang ở trên trang và các điều khiển khác trên trang thực hiện đăng lại chính xác, không phải điều này.
lẽ không được tính là một câu trả lời nhưng Ajax Control Toolkit cung cấp những gì bạn muốn đã được bên trong một bảng cập nhật: http://www.asp.net/AJAX/AjaxControlToolkit/Samples/CascadingDropDown/CascadingDropDown.aspx – Sean
Có; Mặc dù vậy, tôi đã tuyên thệ nhậm chức ACT mãi mãi. IMO rác tuyệt đối; Tôi đang thực sự xây dựng một sự thay thế cho dự án của tôi, vì chúng tôi chỉ có thể có được sự kiểm soát CCD để làm việc với một dịch vụ web, có những tác động khác. –