2010-03-14 362 views
3

我用这个代码来填充下拉列表MVC填充下拉列表

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

,但如果我想使用一个不表列,但两个或多个列我必须这样做?例如

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

这里有一个类似的问题http://stackoverflow.com/questions/2319691/can-i-customise-my-data-text-field-in-an -mvc-selectlist-for-the-use-the -help/2319842#2319842 – uvita 2010-03-14 19:46:51

回答

4

只是一个属性添加到您的 模型 视图模型:

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

,并使用这个属性:

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

如果'FullName'仅用于演示文稿,则应该避免使用。 – 2010-03-14 19:41:15

+2

这就是为什么应该使用ViewModel。 Model - > ViewModel - > View。 ViewModel就是你展现给View的东西,所以这样的属性是允许的。 – 2010-03-14 19:47:17

+0

现在听起来好多了。 :) – 2010-03-14 20:14:11

0

你总是可以手动填写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; 
0

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

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 
      }; 
    }