我有一個公開的方法,它返回我一個列表,稱爲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;
}
可以嗎?
非常好!這似乎工作。我只需要解決如何設置「選定項目」。我會RTF。 :) – Craig
我已更新我的答案,使選定的項目工作 –
謝謝亞歷山大 - 但選定的項目不起作用。我將它設置在模型中,當我調試時,選擇的項目被設置,但是當它呈現時,「Selected」從不使用,它只是默認爲列表中的第一項。 – Craig