2013-11-20 205 views
1

我有我的asp.net MVC Web應用程序內的以下觀點: -最佳方式

 @model IEnumerable<TMS.Models.TMSVirtualMachine> 
     <td> 
@(item.TechnologyBackUpStatu == null ? "None" : item.TechnologyBackUpStatu.Name)   

@Html.DisplayFor(model=>item.TechnologyBackUpStatu.Name) 
     </td> 

TechnologyBackUpStatus是一個可空導航屬性,這意味着該模型可能沒有TechnologyBackUpStatus,所以目前我使用兩種方法顯示item.TechnologyBackUpStatu.Name)。但爲什麼評論我應該考慮;使用DisplayFor或使用? :以及爲什麼onr評價比其他評分更好?

由於

+0

如果爲空的,那麼你必須使用item.TechnologyBackUpStatu.HasValue來檢查null和item.TechnologyBackUpStatu.Value訪問值 –

回答

1

DisplayFor使用允許DataAnnotation使用,例如用於格式化目的。最好使用它比原始@item.TechnologyBackUpStatu.Name

由於您的導航屬性是一個複雜的類型,你可以建立一個DisplayTemplate,你選擇如何顯示您的實體,像這樣:

您的模板:Shared/DisplayTemplates/TechnologyBackUpStatu.cshtml

@model MyNamespace.TechnologyBackUpStatu 

@if(Model != null) 
{ 
    @Html.DisplayFor(model => model.Name) 
} 

然後,在你的主觀點:

@Html.DisplayFor(model => item.TechnologyBackUpStatu) 
0

是您剛纔創建另一個屬性的最簡單的方法,只是將其從「TechnologyBackUpStatu」得到的值,如果它有一個價值。

下面是一個例子,要做到這一點,您需要啓用Lazy Loading,同時忽略DbContext類中的屬性。

在你的模型:

public class TMSVirtualMachine 
{ 
    public int? TechnologyBackUpStatuId { get; set; } 

    public string TechnologyBackUpStatuName 
    { 
     get 
     { 
      return TechnologyBackUpStatuId.HasValue ? 
         TechnologyBackUpStatu.Name : "None"; 
     } 
    } 
    public virtual TechnologyBackUpStatu TechnologyBackUpStatu { get; set; } 
} 

您認爲:

@Html.DisplayFor(model=>item.TechnologyBackUpStatuName) 

在你的DbContext類

public class YourDbContext : DbContext 
{ 
    protected override void OnModelCreating(DbModelBuilder modelBuilder) 
    { 
     modelBuilder.Entity<TMSVirtualMachine>().Ignore(n => n.TechnologyBackUpStatuName); 
    } 
}