我有一个服务层,它公开了一个方法,它返回一个名为 GetStates 的列表。
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 保存选中状态,state 保存选中状态的文本描述。在构造函数中,我试图为视图创建一个 states SelectList ... 并填充它。
在视图中,我尝试显示下拉列表:
@Html.DropDownListFor(m=>m.stateId, new SelectList(Model.states, "stateId", "description", Model.priorityId))
这是失败的,令人沮丧。
DataBinding:“System.Web.Mvc.SelectListItem”不包含名为“stateId”的属性。
我已经搜索过了,我认为我这样做是正确的,但是错误说我不是……很清楚。:) 有人可以指导我为什么它不起作用,而且,这是做事的正确方法吗?
编辑:在下面的帮助之后,它现在可以工作了。如果我正在创建一个新任务(taskId==0),那么我必须获取存储在我的数据库中的下拉列表的默认值......那么,这干净吗?这是我的对象的工作构造函数:
公共 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;
}
可以吗?