【问题标题】:mvc fill dropdownlistmvc 填充下拉列表
【发布时间】:2010-03-15 16:47:40
【问题描述】:

我使用此代码填充下拉列表

ViewData["projectType"] = new SelectList  
  (_dataManager.Project.ProjectTypeList(), "Id", "Name");

但是如果我想使用的不是一个表格列而是两个或更多列,我必须做什么?例如

ViewData["projectType"] = new SelectList  
  (_dataManager.Project.ProjectTypeList(), "Id", "Name1"+"Name2");

【问题讨论】:

标签: asp.net-mvc linq drop-down-menu


【解决方案1】:

只需将属性添加到您的 model ViewModel:

public partial class Project
{
    public string FullName 
    {
        get { return Name1 + Name2; }
    }
}

并使用此属性:

ViewData["projectType"] = new SelectList(
    _dataManager.Project.ProjectTypeList(), 
    "Id", 
    "FullName"
);

【讨论】:

  • 如果FullName 仅用于演示,则应避免这样做。
  • 这就是为什么应该使用 ViewModel。模型 -> 视图模型 -> 视图。 ViewModel 是您呈现给 View 的内容,因此允许存在此类属性。
【解决方案2】:

您始终可以手动填写SelectList

类似的东西(我没有测试过):

var list = new SelectList();
var data = _dataManager.Project.ProjectTypeList();

foreach (var d in data){
  list.Add(new SelectListItem  
    (string.Format("{0} {1}",d.Name1,d.Name2), d.Id, isChecked));
}
ViewData["projectType"] = list;

【讨论】:

    【解决方案3】:

    你应该可以做类似这样的事情:

    ViewData["service_lines"] = new SelectList  
         (repository.SubcontractService_Lines(), "Id", "Name"); 
    

    在存储库中:

        public class SelectService_LineItem  
                {
                    public string Name { get; set; }
                    public Guid Id { get; set; }
                }
    
        public IEnumerable<SelectService_LineItem> SubcontractService_Lines() 
        {
            return
                from sl in db.service_lines
                select new SelectService_LineItem
                {
                    Name = sl.service_line_name + "" + sl.service_line_name2,
                    Id = sl.service_line_id
                };
        }
    

    【讨论】:

      猜你喜欢
      • 2014-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多