2011-03-23 87 views
0

在我的列表和详细信息视图中,我需要显示值(名称)而不是id(int)。赶上是我只有一个集合。所以只显示EnteredBy名字。 Model.Entries.Staff只包含一个不是所有可能匹配的项目。ASP.NET MVC List/Detail View显示名称值

// model 
    public class Entry 
    { 
     [Display(Name = "Assigned To")] 
     [Column(Name = "AssignedToId")] 
     [Required(ErrorMessage = "You must select an individual.")] 
     public int AssignedToId { get; set; } 

     [Display(Name = "Entered By")] 
     [Column(Name = "EnteredById")] 
     [Required(ErrorMessage = "You must select an individual.")] 
     public int EnteredById { get; set; } 

     public virtual Staff Staff { get; set; } 
    } 

// view 
    @foreach (var item in Model.Entries) 
    { 
      <td> 
       @(item.AssignedToId == null ? "None" : item.Staff.Name)) 
      </td> 
      <td> 
       @(item.EnteredById == null ? "None" : item.Staff.Name) 
      </td> 
    } 

回答

1

你有没有考虑过使用ViewModel模式来解决这个问题?

我通常这样做的方式是创建一个ViewModel类,该类包含页面模型和包含查找列表值的属性。这里有一个例子:

在我看来,我有(剃刀):

@Html.DropDownListFor(model => model.ModelObject.leagueId, 
    new SelectList(Model.LeagueList, "leagueId", "leagueName"), 
     "--Select League--", "name='ModelObject.leagueId'") 

ModelObject是我的实际编辑模式...

然后在我的ViewModel我有:

public LeagueSeasonRoList LeagueList { get; set; } 
public Team ModelObject { get; set; } 

在我的模型中,我有一个联盟的属性,它将它们联系在一起。

然后在控制器中,我使用ViewModel而不是直接将Editable对象用作模型。

您需要进行一些调整,以便所有引用都正确,但我已成功使用此模式多次。

心连心,

\ ^/-111

+0

我说'公共IEnumerable的人员{获得;组; }'我的EntryViewModel类和以下两行我的意见:'@(item.AssignedToId == null?“None”:Model.Staff.Where(m => m.StaffId == item.AssignedToId).Single ).Name)'和'@(item.EnteredById == null?“None”:Model.Staff.Where(m => m.StaffId == item.EnteredById).Single()。Name)' – CyberUnDead 2011-03-23 16:50:06