我正在尝试创建一些级联下拉菜单。我通过C#页面加载我的状态加载很好。我似乎无法得到任何东西来装载城市。在城市之后,我将添加另一个下拉菜单,但是一旦我开始工作,我就可以解决这个问题。
我在Chrome错误中注意到“Default.aspx / LoadCitiesByState 500(内部服务器错误)”。
C#
protected void LoadStates()
{
// Populate State dropdown box
ListItem li = new ListItem();
li.Value = "0";
li.Text = "Select One";
DataSet dsState = SharedData.GetStates();
ddlState.DataSource = dsState.Tables[0].DefaultView;
ddlState.DataValueField = "ab";
ddlState.DataTextField = "name";
ddlState.DataBind();
ddlState.Items.Insert(0, li);
}
[WebMethod]
protected void LoadCitiesByState(string state)
{
ListItem li = new ListItem();
li.Value = "0";
li.Text = "Select One";
DataTable dt = new DataTable();
dt = SharedData.GetCities(state);
ddlCity.DataSource = dt.Rows[0].Table.DefaultView;
ddlCity.DataValueField = "ListCity";
ddlCity.DataTextField = "ListCity";
ddlCity.DataBind();
ddlCity.Items.Insert(0, li);
}
标记
<asp:DropDownList ID="state" runat="server" MaxLength="50" Style="width: 200px;" />
<asp:DropDownList ID="city" runat="server" MaxLength="50" Style="width: 200px;" />
function loadCities(selectedItem) {
$.ajax({
type: "POST",
url: "Default.aspx/LoadCitiesByState",
data: "selectedItem",
contentType: "application/json; charset=utf-8",
dataType: "json",
async: true,
success: function Success(data) {
alert(selectedItem);
}
});
答案 0 :(得分:1)
我个人认为级联下拉最好通过服务器端代码处理,而不是通过javascript(处理ASP.NET时)。
对于状态,基本模型将是autoPostBack = true,并且on selected选定的索引会更改处理程序,然后更改Cities中的项目。
如果你不想刷新整个页面(我完全没有责备你),那么只需将两个下拉包装在UpdatePanel中,瞧,所有的AJAX请求等都得到了解决。你。
是的,它的表现不如你在这里做的那么好,但它更快/更容易/更安全,而且通常足够好(如果你使用UpdatePanel)。
答案 1 :(得分:0)
我发现您未在autopostback
中将asp:DropDownList
设置为 true 。
答案 2 :(得分:0)
虽然使用回发最容易做到这一点,但完全做客户端并不是特别复杂,而且实际上并不想进入更新面板工作......只是不太好。
问题必须是:
data: "selectedItem",
我不完全确定正确的咒语是什么,但我相当确定不是它。
本文看起来很有帮助:
http://www.mikesdotnetting.com/Article/97/Cascading-DropDownLists-with-jQuery-and-ASP.NET