2012-07-19 16 views
7

Ho questa parte di codice in una vista MVC che funziona, ma è come un sacco di codice per ottenere questa semplice cosa. Un modo per renderlo più efficiente?Controllare se la proprietà Viewbag è vuota e utilizzare il valore predefinito in una vista

@if (string.IsNullOrEmpty(ViewBag.Name)) 
{ 
@:   
} 
else 
{ 
@:ViewBag.Name 
} 
+1

devo mettere in guardia su una cosa nella mia risposta. Se il ViewBag.Name è "", l'output viene visualizzato come "" non  . È perché il ?? l'operatore lavora solo per stringhe nulle e non vuote. – VJAI

risposta

17
@(ViewBag.Name ?? Html.Raw(" ")) 
5

un modo per rendere più efficiente?

Sì certo, i modelli e l'uso vista sbarazzarsi del ViewBag:

public string FormattedName 
{ 
    get { return string.IsNullOrEmpty(this.Name) ? " " : this.Name; } 
} 

e quindi nella vista fortemente tipizzato:

@Html.DisplayFor(x => x.FormattedName) 

o se si preferisce:

@Model.FormattedName 

Un'altra possibilità è scrivere un aiuto personalizzato er:

public static class HtmlExtensions 
{ 
    public static IHtmlString Format(this HtmlHelper html, string data) 
    { 
     if (string.IsNullOrEmpty(data)) 
     { 
      return new HtmlString(" "); 
     } 

     return html.Encode(name); 
    } 
} 

e quindi a suo avviso:

@Html.Format(Model.Name) 

o se è necessario mantenere il ViewCrap si dovrà convivere con un cast (mi dispiace, .NET non supporta metodo di estensione spedizione su parametri dinamici):

@Html.Format((string)ViewBag.Name) 
+1

Penso che 'dynamic' in generale sia abusato. –

Problemi correlati