2014-12-05 66 views
0

我需要關於如何處理我創建的列表並通過Viewbag傳遞給我的視圖的一些說明。如果POST中的模型出現問題,我需要重新創建並傳遞它,否則我將得到Razor語法的錯誤。我是否需要爲get/post ActionResult創建相同的列表?

有沒有更好的方法來做到這一點,我不必再次創建它(查詢我的數據庫)? 我想Viewbag是不可能的,它只是一個快速修復。

// GET 
    public ActionResult Create() 
    { 
     Person person = new Person(); 
     ViewBag.CountryList = Main.GetCountryList(); // for person.country string 
     return View(Person); 
    } 

    // POST 
    [HttpPost] 
    public ActionResult Create(Person person) 
    { 
     if (ModelState.IsValid) 
     { 
      ... 
     } 
     ViewBag.CountryList = Main.GetCountryList(); 
     return View(person); 
    } 

HTML /剃刀:

@Html.DropDownListFor(model => model.country, ViewBag.CountryList as SelectList) 

回答

1

除非您將該列表存儲在會話或其他內容中,否則您需要重新查詢以獲取列表。

說了這麼幾句話要考慮。一個簡單的下拉式查詢不應該對您的服務器徵稅,以及一個實際上有多少次驗證錯誤(10次中的1次)?通過客戶端驗證和每次都沒有錯誤的組合,這不應該使您的後期方法經常被迫返回到視圖。

1

如果GetCountryList是你可以直接在剃刀使用它的靜態方法。

@Html.DropDownListFor(model => model.country, Main.GetCountryList() as SelectList) 

,如果你想節省反覆查詢數據庫,你應該實現緩存使用System.Web.HttpContext.Current.Cache的CoutryList數據或靜態列表,如果它不會改變。

相關問題