Ho la seguente vista all'interno della mia applicazione web asp.net mvc: -
@model IEnumerable<TMS.Models.TMSVirtualMachine>
<td>
@(item.TechnologyBackUpStatu == null ? "None" : item.TechnologyBackUpStatu.Name )
@Html.DisplayFor(model=>item.TechnologyBackUpStatu.Name)
</td>
il TechnologyBackUpStatus
è una proprietà di navigazione NullAble, il che significa che il modello potrebbe non avere un TechnologyBackUpStatus
, quindi attualmente sto usando due modi per visualizzare il item.TechnologyBackUpStatu.Name )
. ma perché apprach dovrei considerare; usando il DisplayFor
o usare il ? :
e perché apprendere è meglio confrontarsi con l'altro?
Grazie
risposte:
2 per risposta № 1utilizzando DisplayFor
consente l'utilizzo di DataAnnotation, ad esempio per scopi di formattazione. È meglio usarlo che un raw @item.TechnologyBackUpStatu.Name
.
Poiché la proprietà di navigazione è di tipo complesso, puoi creare un DisplayTemplate
dove scegli come mostrare la tua entità, in questo modo:
Il tuo modello: Shared/DisplayTemplates/TechnologyBackUpStatu.cshtml
@model MyNamespace.TechnologyBackUpStatu
@if(Model != null)
{
@Html.DisplayFor(model => model.Name)
}
Quindi, nella tua vista principale:
@Html.DisplayFor(model => item.TechnologyBackUpStatu)
0 per risposta № 2
Il modo più semplice è creare semplicemente un'altra proprietà, ma ottiene solo il valore da "TechnologyBackUpStatu" se ha un valore.
Di seguito è riportato un esempio, per fare ciò, è necessario abilitare il caricamento lento, ignorare anche la proprietà nella classe DbContext.
Nel tuo modello:
public class TMSVirtualMachine
{
public int? TechnologyBackUpStatuId { get; set; }
public string TechnologyBackUpStatuName
{
get
{
return TechnologyBackUpStatuId.HasValue ?
TechnologyBackUpStatu.Name : "None";
}
}
public virtual TechnologyBackUpStatu TechnologyBackUpStatu { get; set; }
}
Nella tua opinione:
@Html.DisplayFor(model=>item.TechnologyBackUpStatuName)
Nella tua classe DbContext
public class YourDbContext : DbContext
{
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Entity<TMSVirtualMachine>().Ignore(n => n.TechnologyBackUpStatuName);
}
}