2012-09-27 15 views
0

我有一個簡單的ASPNET MVC列表視圖,它傳遞一個定製的模型對象。首次通過我需要出去到服務器並返回一個對象列表並顯示在視圖。 我構建的視圖允許按不同的列進行排序,搜索和分頁,並且我已經爲此編寫了所有代碼。然而每次我要去服務器並拉取數據。排序和搜索mvc列表視圖,而無需調用服務器

我可以通過使用我第一次獲得的列表來削減這些數據庫往返行程嗎? 如果是這樣,我怎麼把它從視圖傳回控制器?

Viewdata,Tempdata - 或通過formcollection或許?

回答

1

看看http://www.knockoutjs.com這會給你很多功能來操縱瀏覽器中的列表並保持視圖同步。

但它確實取決於您的對象列表有多大。如果數據量很大,它實際上是一個更實用的解決方案,它已經實現了它。

+0

嗨,謝謝。我希望暫時遠離JavaScript。任何人有任何其他想法如何可以在ASPNET MVC中完成? – user964810

+0

如果您打算在瀏覽器中存儲和處理列表,我看不出如何遠離JavaScript。如果你想出一個解決方案,我會很好奇看到它。你能否發表你的發現。 – IMLiviu

1

其實,如果你回到你的控制器,你會去服務器。

我認爲你真的不希望再次查詢數據庫以獲取過濾,排序和分頁的數據,並且只想對視圖中的數據進行排序或對來自模型視圖類的數據進行分頁。

請記住,這種類型的操作不一定總是比重新查詢數據庫更好,因爲您將通過網絡將更多信息發送回服務器,並且通常以編程方式對列表進行排序元素的操作比從數據庫中排序的檢索更少。

這裏的關鍵決定將在您的數據庫查詢的成本和您的listview元素的大小之間。如果你的查詢很輕並且得到(或可以得到)很多結果,那麼對它進行排序將比查詢更加昂貴,而如果你的查詢很複雜並且通常只會拋出很少的結果,那麼實際上,在不重新查詢數據庫的情況下對數據進行排序會更有效。

試着爲排序創建一個新的控制器方法,這個方法將作爲參數接收你的列表視圖模型類,並且你需要以某種方式發送回你的服務器那個信息。我通常在將數據作爲JSON傳遞給控制器​​的情況下使用AJAX調用。

+0

感謝您的回答。目前,我們正在撤回的數據是小而輕的 - 因此我們的想法是避免重新調用數據庫。正如我下面所說的,我希望避免使用JS並在控制器中完成所有工作 - 但如果我要回到Controller的服務器,那麼我是正確的,我也可以將額外的位添加到數據庫中。再次感謝。 – user964810