2012-08-30 27 views
0

我建立使用ASP.Net MVC 3和一個視圖有三個DropDownLists(國家,州,市)是按需加載的應用程序。創建視圖沒問題,但我不知道如何創建編輯視圖,因爲數據庫表只存儲CityId。負載編輯分貝時級聯下拉菜單與淘汰賽堅持行

我的數據庫結構如下:當用戶打開編輯視圖

CountriesTable = {CountryID, CountryName} 
StatesTable = {StateID, StateName, Abbreviation, CountryID} 
CitiesTable = {CityID, CityName, StateID} 

,我需要獲得以前選擇CityID找到STATEID,這將幫助我找到CountryID。這必須指導三個DropDown的負載。

CountriesDropDown =將加載所有國家,並選擇一個與所選城市的CountryID StatesDropDown =將加載所選國家的所有狀態 CitiesDropDown =將加載

謝謝

被選中狀態的所有城市

回答

0

我不是100%肯定,我正確地理解你的問題,但我會給它一個鏡頭:)

你寫:

CountriesDropDown =將加載所有國家......在此基礎上

,當你初始化knockoutJS視圖模型,你可以初始化一個observable array包含代表的國家名單下拉/ select元素的可能值。

要做到這一點,你可以做一個Ajax請求得到你需要填充的下拉列表中的數據,例如:

// Get all countries 
$.getJSON("/GetAllCountries", function(data) { 
    // Add the new data to the observable array holding the list of countries 
}); 

這是使用observable arrays在視圖模型的數據表示和options bindings一個好主意在視圖中(可觀察數組對數組進行任何更改都會立即影響UI)。

然後,你可以有三個觀測分別代表在三個下拉列表中選擇的值 - 例如:

self.selectedCountry = ko.observable(); 
self.selectedState = ko.observable(); 
self.selectedCity = ko.observable(); 

(記住options綁定允許您指定「域」應該包含。選定的值使用value參數)

繼續在以前的報價你寫:

CountriesDropDown = WIL L負載所有國家,並選擇一個與所選城市

的CountryID要做到這一點,你可以做一個AJAX請求,詢問是哪個國家的某個城市對應的Web服務器。利用這一結果,你可以使用淘汰賽這樣改變國家下拉列表中選擇的值:

self.selectedCountry(theCountryToBeSelected); 

然後你寫:

StatesDropDown =將加載所選國家的所有狀態

爲了達到這個目的,您可以利用淘汰賽訂閱觀察變化的能力,當選定的國家發生變化時,您可以更改州下拉菜單的內容 - 例如像這樣:

self.selectedCountry.subscribe(function(newSelectedCountry) { 
    // Get all states based on the new selected country 
    $.getJSON("/GetStatesForCountry/" + newSelectedCountry.id, function(data) { 
     // Add the new data to the observable array holding the list of states 
    }); 
}); 

最後,你寫:

CitiesDropDown =將加載所選國家的所有城市

要做到這一點,你可以使用同樣的原理如上:根據所選狀態的ID創建AJAX請求,並使用從服務器返回的數據填充代表城市列表的可觀察數組。

如果這不是你正在尋找的東西,我希望我至少能夠激勵你或者將你指向正確的方向:)

+0

謝謝。這是我需要的。 –