2012-07-19 22 views
7

Tengo este código en una vista MVC que funciona, pero se ve como una gran cantidad de código para lograr esto simple. ¿Alguna forma de hacerlo más eficiente?Comprobando si la propiedad Viewbag está vacía, y usando el valor predeterminado en una vista

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

tengo que advertir sobre una cosa en mi respuesta. Si ViewBag.Name es "", obtendrá el resultado como "" no  . Es porque el ?? el operador solo funciona para cadenas nulas y no vacías. – VJAI

Respuesta

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

alguna manera de hacer que sea más eficiente?

Sí, claro, el uso de modelos de vista y deshacerse de la ViewBag:

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

y luego en su opinión inflexible:

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

o si prefieren:

@Model.FormattedName 

Otra posibilidad es escribir una ayuda personalizada 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); 
    } 
} 

y luego en su opinión:

@Html.Format(Model.Name) 

o si necesita para mantener el ViewCrap tendrá que vivir con un molde (lo siento, .NET no admite el método de extensión de despacho en parámetros dinámicos):

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

Creo que 'dynamic' en general es usado en exceso. –

Cuestiones relacionadas