/ / Najlepszy sposób na radzenie sobie z właściwymi właściwościami nawigacyjnymi Null - asp.net-mvc, asp.net-mvc-4, brzytwa

Najlepszy sposób radzenia sobie z właściwościami nawigacyjnymi Null-able w moim widoku - asp.net-mvc, asp.net-mvc-4, brzytwa

Mam następujący widok wewnątrz mojej aplikacji sieci web mvc asp.net: -

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

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

temu TechnologyBackUpStatus jest właściwość null nawigacji, co oznacza, że model może nie mieć TechnologyBackUpStatus, więc obecnie używam dwa sposoby wyświetlania item.TechnologyBackUpStatu.Name ) . ale dlaczego apprach i należy rozważyć; za pomocą DisplayFor lub usig ? : i dlaczego onr apprach lepiej jest porównanie do innych?

Dzięki

Odpowiedzi:

2 dla odpowiedzi № 1

Za pomocą DisplayFor umożliwia użycie DataAnnotation, dla celów formatowania np. To lepiej go używać niż surowy @item.TechnologyBackUpStatu.Name.

Jak Twój właściwość nawigacji jest typu złożonego, można zbudować DisplayTemplate gdzie wybrać sposób wyświetlania jednostki, jak to:

Szablon: Shared/DisplayTemplates/TechnologyBackUpStatu.cshtml

@model MyNamespace.TechnologyBackUpStatu

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

Następnie w głównym widoku:

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

0 dla odpowiedzi nr 2

Najprostszym sposobem jest po prostu utworzyć inny obiekt, to jedynie Pobiera wartość od "TechnologyBackUpStatu", jeśli ma ona wartość.

Poniżej znajduje się przykład, aby to zrobić, musisz włączyć leniwy ładowanie, również zignorować właściwość w klasy DbContext.

W modelu:

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

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

W widoku:

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

W swojej klasy DbContext

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