2010-05-21 15 views
8

¿Existe alguna forma mejor de escribir el código a continuación? Tengo bastantes bloques que son similares, y esto hace que el código en la página de visualización sea muy complicado para trabajar.Manera limpia de valores de salida en ASP.NET MVC Views cuando el valor no es nulo

El valor de los datos con la etiqueta asociada solo debe salir cuando se cumplen ciertas condiciones, que casi siempre es si el valor no es nulo.

Las opciones que puedo pensar es utilizar una response.write para minimizar al menos el uso de las etiquetas de script ASP, o formatear la página web de tal manera que la etiqueta se muestre con un valor de tipo n/a apropiado.

<% if (myData.Balance != null) 
{ %>      
    Balance: <%= String.Format("{0:C}", (myData.Balance))%>       
<% } %> 

Respuesta

8

Si usted hace uso de la clase DisplayFormatAttribute en System.ComponentModel.DataAnnotations se puede controlar de forma explícita la salida de valores nulos en la vista sin tener que lidiar con las etiquetas de secuencia de comandos en línea. Por sí solo eso no lo ayudará a eliminar las etiquetas vinculadas al valor, pero al menos puede hacer que sustituya automáticamente una salida si el valor es nulo.

[DisplayFormat(NullDisplayText = "N/A", DataFormatString = "{0:c}")] 
public double? Price { get; set; } 

<%=Html.DisplayFor(m => m.Price)%> 

Con el código anterior se mostrará automáticamente "N/A" si el valor es nulo, de lo contrario se mostrará el valor utilizando el formato de moneda predeterminado.

Como alternativa, si también desea eliminar la etiqueta y no desea tratar las etiquetas de secuencia de comandos en su vista, podría crear su propia HtmlHelper que toma una expresión en el mismo formato de Html.DisplayFor(expression) y luego devuelve la combinación salida de Html.LabelFor(expression) y Html.DisplayFor(expression) si y solo si el valor asignado a esa expresión no es nulo.

+3

Perdona mi ignorancia si este no es el caso, se trata de solo una suposición: podrías usar una cadena vacía "" en lugar de "N/A" para el 'NullDisplayText', y poner la etiqueta dentro de' DataFormatString' (como "Balance: {0: c}") y lograr lo que el OP está pidiendo? – Funka

+1

Eso probablemente funcionaría perfectamente. Excelente idea. –

2

Si usted se pega el "Saldo" dentro de la cadena de formato, y utilizar Response.Write, que termina pareciéndose mucho más limpio, pienso:

<% if (myData.Balance != null) 
     Response.Write(String.Format("Balance: {0:C}", myData.Balance)) %> 
Cuestiones relacionadas