/ / Il modo migliore per gestire le proprietà di navigazione Null-able sulla mia vista - asp.net-mvc, asp.net-mvc-4, rasoio

Il modo migliore per gestire le proprietà di navigazione Null-able sulla mia vista - asp.net-mvc, asp.net-mvc-4, rasoio

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 № 1

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