2012-08-25 44 views
0

我有一個公開的方法,它返回我一個列表,稱爲GETSTATES服務層。在模型中構建DropDownList?

public List<StateObject> GetStates() 

我的狀態對象只是一個自定義對象我創建:

public class StateObject 
{ 
    public int stateId { get; set; } 
    public string description { get; set; } 
    public Boolean isDefault { get; set; } 
} 

在我的模型,我試圖創建將用於任務的我的顯示和修改屏幕模型。有一件事將用於處理顯示和選擇下拉框,這將給出我的任務可用的狀態列表。所以,我的模型看起來是這樣的(已刪除的屬性,我們沒有車程約 - 它比這大一點:

public class TaskModifyModel 
{ 
    public int stateId { get; set; } 
    public string state { get; set; } 

    public SelectList states { get; private set; } 

    public TaskModifyModel() 
    { 

     states = new SelectList(
      (new ReferenceService().GetStates()), 
      "stateId", 
      "description", 
      1); 

    } 
} 

所以,STATEID保持選中狀態,狀態保持選中狀態的文字說明。在構造函數中,我試圖創建一個狀態的SelectList的看法...和填充它

在視圖中,我再嘗試顯示下拉列表:

@Html.DropDownListFor(m=>m.stateId, new SelectList(Model.states, "stateId", "description", Model.priorityId)) 

這是失敗的,悽慘。

數據綁定:「System.Web.Mvc.SelectListItem」不包含名爲「STATEID」的屬性。

找遍了,我想我這樣做的正確的方式,但錯誤說我不是..清楚。 :)有人可以指導我爲什麼它不工作,而且,這是做事的正確方法嗎?

編輯: 下面援助之後,它現在的工作。如果我創建一個新的任務(任務id == 0),那麼我得下拉的默認值,存儲在我的數據庫....所以,這是乾淨的?這是我的工作構造函數的對象:

public TaskModifyModel() { var referenceService = new ReferenceService(); var p = referenceService.GetPriorities(); var s = referenceService.GetStates();

var defaultP = (from a in p where a.isDefault select a).FirstOrDefault(); 
    var defaultS = (from a in s where a.isDefault select a).FirstOrDefault(); 

    priorities = new SelectList(
     (p), 
     "priorityId", 
     "description" 
     ); 
    priorityId = taskId == 0 ? defaultP.priorityId : priorityId; 

    states = new SelectList(
     s, 
     "stateId", 
     "description"); 
    stateId = taskId == 0 ? defaultS.stateId : stateId; 

} 

可以嗎?

回答

2

public SelectList states { get; private set; }已經是一個的SelectList,所以你並不需要在您的視圖中再次施展它。

試試這個:

@Html.DropDownListFor(m=>m.stateId, Model.states) 

而在你的ViewModel,刪除參數 「的SelectedValue」。 @ Html.DropDownListFor會將下拉菜單初始化爲正確的值。

public class TaskModifyModel 
{ 
    public int stateId { get; set; } 
    public string state { get; set; } 

    public SelectList states { get; private set; } 

    public TaskModifyModel() 
    { 

     states = new SelectList(
      (new ReferenceService().GetStates()), 
      "stateId", 
      "description"); 
    } 
} 
+0

非常好!這似乎工作。我只需要解決如何設置「選定項目」。我會RTF。 :) – Craig

+0

我已更新我的答案,使選定的項目工作 –

+0

謝謝亞歷山大 - 但選定的項目不起作用。我將它設置在模型中,當我調試時,選擇的項目被設置,但是當它呈現時,「Selected」從不使用,它只是默認爲列表中的第一項。 – Craig