2011-11-13 17 views
0

我在我的控制器中有一個創建方法,這打開了一個視圖。在視圖上,用戶可以輸入數據來填充模型。其中一些數據來自選擇列表。這些選擇列表從數據庫填充。我應該將選擇列表數據發送到視圖還是讓它自己獲取數據?

我想知道的是,我應該:

一)獲取控制器選擇列表中的數據,填充字段是這樣的:

public IEnumerable<SelectListItem> Statuses { get { return GetStatusType(); } } 

通過以下狀態的模型,然後通過對狀態()做一個循環,並創建一個選擇列表,並選擇HTML

b)不執行任何操作的控制器和視圖都在模型如下:

<select id="Q_StatusID" name="Q.StatusID">@Html.Raw(
SelectHelper.Status(false, @Model.PageMeta.StatusID))</select> 

SelectHelper是獲取所有選擇列表和選項HTML的C#代碼。

c)一些更好的方法:

回答

0

我會去第一個。這樣

一些事情一個輔助方法

public List<SelectListItem> getAllSelectList(List<Items> lists) 
      { 
       List<SelectListItem> selectListItems = new List<SelectListItem>(); 
       foreach (Term term in lists) 
       { 
        selectListItems.Add(new SelectListItem() { Text = term.yourselectfield, Value = term.your value }); 

       } 
       return selectListItems; 
      } 

控制器

//在假設你GetStatusType()方法會返回一個對象

ViewData.selectlist=getAllSelectList(GetStatusType()); 

的名單上你的看法,如果你是使用剃刀

@Html.DropDownList("selectlist", null, "Choose") 

<%: Html.DropDownList("selectlist", null, "Choose") %> 
+0

您是否認爲上述方法之間有任何性能差異? –

+0

我不這麼認爲,但第一個很容易測試和調試。 – tkt986

0
  1. 爲您GetStatusType有一個靜態查找類&靜態方法。
  2. 緩存從數據庫首次加載後的所有狀態類型。
  3. 從視圖中調用GetAllStatusType以顯示。
+0

你能解釋你將如何緩存狀態類型嗎? –

+0

你可以做類似 私有靜態IEnumerable 狀態; public IEnumerable 狀態 { get {return statuses (statuses = GetStatusType()); } } –

0

我會創建一個視圖模型,它有一個IEnumerable <狀態>屬性。然後在您的視圖中顯示select元素:

@Html.DropDownListFor(model => model.PageMeta.StatusID, new SelectList(Model.Statuses, "Id", "Name"), "Some default which has no value") 

其中,Id和Name設置爲狀態模型中的相應屬性。

相關問題