2011-12-20 16 views
6

要素を条件付きで表示/非表示する方法はありますか?ビューは非常に大きいと私はメンテナンスが心配です:剃刀を使った条件付き表示要素

@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> 
} 

おかげで、 Hoisel

答えて

7

あなたがします条件付きで出力内容のカスタムヘルパー書くことができます:

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

、その後に:

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

もう一つの可能​​性は、スプレイテンプレート:

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

その後、あなたは文字列型(またはカスタム1)の表示テンプレートを定義することができます。

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

とあなたのビューモデル上:

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

ことがありますモデルのロジックを処理するビューの仕事ではありません。そのロジックを適切なコントローラに移動します。

ビューが大きすぎる場合は、部分的なビューを開始することを検討することです。たぶん、いくつかのコードを再利用することができます。

2

あなたがそうのようなコードの一部をリファクタリングすることにより、ビューでは、コードをredudeことができます:私はあなたのコード内prazosEEntregasの種類に推測している

<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. 
} 

、あなたは正しいタイプのものを交換する必要があるかもしれません。

関連する問題