在@ Html.DropDownListFor上设置Html Attribute重载

时间:2014-06-02 08:11:03

标签: asp.net-mvc html-helper

视图模型

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不是系统对象吗?

我觉得我缺少一些非常基本的东西。

1 个答案:

答案 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"那样的单个简单字符串值,这当然会失败。