2011-12-20 3 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:" 
) 

또 다른 가능성은 di 스플레이 템플릿 :

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

그것은이다

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

와 뷰 모델 :

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

그런 다음 당신은 문자열 유형의 표시 템플릿 (또는 사용자 정의 하나)를 정의 할 수 있습니다 모델의 논리를 처리하는 뷰의 작업이 아닙니다. 해당 로직을 해당 컨트롤러로 이동하십시오.

보기가 너무 크게 시작될 경우 고려해야 할 사항으로 부분보기를 만들기 시작하십시오. 어쩌면 일부 코드를 재사용 할 수 있습니다.

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

, 올바른 유형이 교체해야 할 수도 있습니다 .

관련 문제