2011-12-20 14 views
6

Czy istnieje lepszy sposób na pokazywanie/ukrywanie elementów warunkowo (za pomocą maszynki do golenia) poniżej tego poniżej? Widok jest bardzo duży i jestem zaniepokojony konserwacji:Warunkowe elementy wyświetlacza za pomocą Razor

@if(@Model.Atendimento.PrazosEEntregas.Visivel) 
{ 
    <div> 
     <h4>Prazos e entrega do serviço</h4> 

     @if (!string.IsNullOrWhiteSpace(@Model.Atendimento.PrazosEEntregas.PrazoFinalizacaoServico)) 
     { 
      <p>@Model.Atendimento.PrazosEEntregas.PrazoFinalizacaoServico</p> 
     } 

     @if (!string.IsNullOrWhiteSpace(@Model.Atendimento.PrazosEEntregas.PrazoRetiradaDocumento)) 
     { 
      <p><strong>Prazo de retirar o documento:</strong> @Model.Atendimento.PrazosEEntregas.PrazoRetiradaDocumento</p> 
     } 

     @if (!string.IsNullOrWhiteSpace(@Model.Atendimento.PrazosEEntregas.OndeRetirarServico)) 
     { 
      <p><strong>Onde retirar/receber:</strong> @Model.Atendimento.PrazosEEntregas.OndeRetirarServico</p> 
     } 

     @if (!string.IsNullOrWhiteSpace(@Model.Atendimento.PrazosEEntregas.ObservacaoPrazoRetirada)) 
     { 
      <p><strong>Observação:</strong> @Model.Atendimento.PrazosEEntregas.ObservacaoPrazoRetirada</p> 
     } 
    </div> 
} 

Dzięki, Hoisel

Odpowiedz

7

można napisać niestandardowy pomocnika, który będzie warunkowo wyjściowe zawartość:

public static class HtmlExtensions 
{ 
    public static IHtmlString FormatValue(
     this HtmlHelper htmlHelper, 
     string value, 
     string label 
    ) 
    { 
     if (string.IsNullOrWhiteSpace(value)) 
     { 
      return MvcHtmlString.Empty; 
     } 

     var result = string.Format(
      "<p><strong>{0}</strong> {1}</p>", 
      htmlHelper.Encode(label), 
      htmlHelper.Encode(value) 
     ); 
     return new HtmlString(value); 
    } 
} 

a następnie :

@Html.FormatValue(
    Model.Atendimento.PrazosEEntregas.ObservacaoPrazoRetirada, 
    "Observação:" 
) 

Inną możliwością jest użycie di splay szablon:

@Html.DisplayFor(x => x.Atendimento.PrazosEEntregas.ObservacaoPrazoRetirada) 

Następnie można zdefiniować szablon wyświetlania dla typu string (lub niestandardową):

@model string 
@if (!string.IsNullOrWhiteSpace(Model)) 
{ 
    <p> 
     <strong>@ViewData.ModelMetadata.DisplayName</strong> 
     @ViewData.TemplateInfo.FormattedModelValue 
    </p> 
} 

i na Twoim widoku modelu

[DisplayName("Observação:")] 
[UIHint("MyTemplate")] 
public string ObservacaoPrazoRetirada { get; set; } 
0

Jest nie jest zadaniem widoku do obsługi logiki modelu. Przenieś tę logikę do odpowiedniego kontrolera.

Co należy wziąć pod uwagę, jeśli Twój widok zaczyna być zbyt duży, zacznij robić częściowe widoki. Może jakiś kod może być ponownie użyty.

2

Można redude kod na wyświetlanie przez refactoring niektóre kodu tak:

<h4>Prazos e entrega do serviço</h4> 

@{ PrazosEEntregas prazosEEntregas = Model.Atendimento.PrazosEEntregas; } 

@if (!string.IsNullOrWhiteSpace(prazosEEntregas.PrazoFinalizacaoServico)) 
{ 
    <p>prazosEEntregas.PrazoFinalizacaoServico</p> 
} 
@if (!string.IsNullOrWhiteSpace(prazosEEntregas.PrazoRetiradaDocumento)) 
{ 
    //etc. 
} 

się domyślić w rodzaju prazosEEntregas w kodzie, może trzeba wymienić, że z odpowiedniego typu .

Powiązane problemy