2010-01-27 76 views
1

我已經閱讀了有關ASP.NET MVC中使用的模態狀態的各種文章。我已閱讀Scott Gu的這篇文章link text。每當選擇列表需要顯示錯誤時,我的控制器中都有一些代碼正在觸及數據庫。有沒有辦法讓模態保存列表內容?或者也許緩存列表?帶有SelectLists的ASP.NET MVC的模態狀態?

// controller code 
// re display the error do to a business rule violation 
_ratesViewData.FSCCOde = getFscCode(_rateService.GetFscCode()); 

// controller code 
private SelectList getFscCode(IEnumerable items, object selectedValue) 
{ 
    return new SelectList(items, "FscID", "FscCode", selectedValue); 
} 

// ASP.NET MVC control code 
// ASP.NET MVC control code 
// ASP.NET MVC control code 
Fuel Surcharge Code 
<%=Html.DropDownList("FscCode", "No Fuel Surcharge")% 

回答

1

首先,由於錯誤而重新顯示視圖通常是不常見的操作。我想要花費我的精力來優化更常見的操作,比如首先顯示視圖。其次,考慮到典型的下拉式組合框至多有幾十個項目,我想知道是否沒有更深的問題,如果這實際上是由於數據庫負載而導致的優化問題。第三,如果你確定這實際上是一個性能問題,那麼緩存這些列表就沒有問題,但是除非你肯定這是一個問題,否則我不會優化任何東西。

+0

我目前正在重構我們的凌亂控制器。我將模態狀態添加到我們的操作中。我試圖看看模態狀態是否會保存我們的物品清單?或者每次我需要列表時,都必須打開數據庫?使用Html.Textboxes(),它們會將模式狀態下的無效值保留下來。我沒有看到列表正在被保存,我只能看到模式綁定器中的選定ID – user154366 2010-01-27 19:27:17

+0

'ModelState'不是緩存。正如你注意到的,它用於處理用戶輸入,有效或無效。由於POST不提交'SelectList'(並且不能,真的),它將永遠不會在'ModelState'中。如果您最初從數據庫填充選擇列表,我會建議您在出現錯誤時重新顯示時也這樣做。這可以讓你分享代碼。如果最初的GET足夠快,那麼這也將足夠快。 – 2010-01-27 19:39:34