视图模型
public class ProjectEditViewModel
{
public Project Project { get; set; }
public Client Clients { get; set; }
public PageElementsViewModel PageElements { get; set; }
public SelectList ClientList { get; set; }
public IEnumerable<int> ClientListId { get; set; }
}
控制器
ProjectEditViewModel peVm = new ProjectEditViewModel
{
Project = projectRepo.Projects.FirstOrDefault(_ => _.ProjectId == projectId),
ClientList = new SelectList(clientRepo.Clients.Select(_ =>
new { id = _.ClientId, name = _.Name }).ToList()),
ClientListId = clientRepo.Clients.Select(_ => _.ClientId).ToList(),
PageElements = new PageElementsViewModel
{
PageTitle = "Edit Project",
TitleIcon = "entypo-pencil",
BodyClass = "project-edit"
}
};
查看
@Html.DropDownListFor(model => model.Project.ClientId, Model.ClientList,
new { value = Model.ClientList,@class="drop-item" })
我只想在当前的下拉列表值中添加一个类和一个值。当前的Model.ClientList返回一个值,因此它不像下拉列表那样被弹出。
http://msdn.microsoft.com/en-us/library/ee703573(v=vs.118).aspx
htmlAttributes类型:System.Object
包含要为元素设置的HTML属性的对象。
是Model.ClientList不是系统对象吗?
我觉得我缺少一些非常基本的东西。
答案 0 :(得分:0)
您可以通过编辑value
类来跳过以这种方式分配新ProjectEditViewModel
的部分。
由于您正在创建SelectList,因此您可以使用SelectListItem
属性而不是匿名类型创建value
:
ProjectEditViewModel peVm = new ProjectEditViewModel
{
Project = projectRepo.Projects.FirstOrDefault(_ => _.ProjectId == projectId),
ClientList = new SelectList(clientRepo.Clients.Select(_ =>
/* NEW: typesafe instead of anonymous type */
new SelectListItem
{
Value = _.ClientId,
Text = _.Name
}).ToList()),
ClientListId = clientRepo.Clients.Select(_ => _.ClientId).ToList(),
PageElements = new PageElementsViewModel
{
PageTitle = "Edit Project",
TitleIcon = "entypo-pencil",
BodyClass = "project-edit"
}
};
至于你的原始代码:你正在分配一个值,但它是一个完整的selectList,而不是像"1" or "Mastercard"
那样的单个简单字符串值,这当然会失败。