我在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
是一个NullAble导航属性,这意味着模型可能没有TechnologyBackUpStatus
,因此目前我使用两种方式显示item.TechnologyBackUpStatu.Name )
。但为什么我应该考虑评价;使用DisplayFor
或使用? :
和为什么onr apprach比其他更好?
由于
答案 0 :(得分:2)
使用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)
答案 1 :(得分:0)
最简单的方法是创建另一个属性,如果它有值,它只从“TechnologyBackUpStatu”中获取值。
下面是一个示例,为此,您需要启用延迟加载,同时忽略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);
}
}