2012-01-19 73 views
2

我正在嘗試創建一些級聯下拉菜單。我有我的國家加載通過C#頁面加載罰款。我似乎無法得到任何東西來啓動城市。在城市之後,我會再添加一個下拉菜單,但是一旦我有了這個工作,我就可以解決這個問題。C#ASP.NET的級聯下拉菜單

我注意到「Default.aspx/LoadCitiesByState 500(內部服務器錯誤)」在我的Chrome錯誤中。

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

我看你有沒有設置asp:DropDownListautopostback真正

+0

希望出現這種情況使頁面重載關係嗎?我試圖讓網頁不刷新。 –

+0

它肯定會使頁面重新加載。如果你不想整個頁面重新加載,那麼你可以使用AJAX。有一個scriptManager,並在其中使用DropDownlist。這個博客顯示在gridview內部級聯。您也可以將相同的邏輯應用於您的程序。 http://csharpdotnetfreak.blogspot.com/2009/02/ajax-cascading-dropdownlist-database.html 您還可以查看MSDN(http://msdn.microsoft.com/zh-cn/library/ie/ bb399001.aspx)example – Vinay

+0

我找到了一個更好的例子 http://www.asp.net/ajaxLibrary/AjaxControlToolkitSampleSite/CascadingDropDown/CascadingDropDown.aspx – Vinay

1

就我個人而言,我發現級聯下拉最好通過服務器端代碼處理,而不是通過javascript(當處理ASP.NET時)。

對於州來說,基本模型應該是autoPostBack = true,並且對選定的索引改變處理程序,然後改變城市中的項目。

如果你不想整個頁面刷新(我根本不責怪你),那麼只需在UpdatePanel中包裝這兩個下拉菜單,並且所有的AJAX請求等都會被照顧到爲你。

是的,它的表現不如你自己在這裏所做的那樣好,但它更快/更簡單/更安全,而且它通常足夠好(如果你使用UpdatePanel的話)。

+0

+1 UpdatePanel是我的想法,也是最簡單的方法。 – Aligned