2013-02-22 115 views
5

我的團隊正在使用.NET 4.5的MVC4開發Web應用程序。一項任務是創建一個父級下拉列表,當父級中選擇一個值時,將更新子級下拉列表 - 例如,狀態的下拉列表將在選擇狀態時過濾城市的下拉列表。級聯下拉列表數據源

在我們的其他項目中,我們使用Ajax調用Web服務或數據庫來在選擇父項值時填充子項的值。在我上面的例子中,選擇了明尼蘇達州,並且對數據庫進行了Ajax調用以獲取MN中的所有城市。我已經閱讀了這裏的其他文章和遵循這個概念的教程。

我們團隊的新開發人員認爲上述方法效率低下,最好在頁面加載時抓取所有城市,將城市作爲Jason對象存儲在JavaScript變量中,然後使用jquery循環訪問JavaScript變量並建立子女名單。

有人可以告訴我他們使用哪種方法嗎?我不相信將數千條記錄帶入瀏覽器,並且當我們僅顯示10條記錄時,存儲在客戶端上是非常有效的。這位開發人員還認爲,在JavaScript中循環遍歷10000行JSON對象比使數據庫調用抓取10行更快。

+1

我更傾向於*而不是*將太多浪費的數據帶給客戶端。桌面瀏覽器可能會很順利地處理它,但如果沒有其他的話,它會浪費帶寬。對於像城市這樣緩慢變化的數據,您可以充分利用緩存並消除數據庫流量。 – 2013-02-22 05:45:55

+0

我同意OP和'Tim medora',如果你不需要通過一次迭代獲得所有數據,你不需要將10000行推送到JSON。這將是無效的。但是如果無論如何,通過AJAX請求獲得整個10000行,將數據推送到瀏覽器將會更加有效。 – Maris 2013-02-22 05:53:05

+0

感謝您的反饋。我想要緩存數據並減少數據庫調用的次數。我認爲這將是一個很好的妥協。我真的不相信在js變量中存儲100個或1000個JSON對象是需要的 – 2013-02-22 06:01:30

回答

1

創建您的列表,你可以調用LINQ的一切。檢查從那裏創建的緩存,然後再進行實例化。

public IList<Example> GetList(string _state) 
{ 

    IList<Example> cities = new List<Example>(); 

    Cache cache = HttpContext.Current.Cache; 

    if (cache[_state] != null) 
     cities = (IList<Example>)cache[_state]; 

    else 
    { 
     //Do your calls 
     cache.Insert(_state, cities); 
    } 

    return cities; 
} 
+0

很好的例子謝謝薩姆 – 2013-02-22 20:00:38