2010-05-21 9 views
8

Esiste un modo migliore per scrivere il codice di seguito? Ho parecchi blocchi simili, e questo rende il codice nella Viewpage molto disordinato con cui lavorare.Modo pulito per generare valori in ASP.NET MVC Visualizzazioni quando il valore non è nullo

Il valore dei dati con l'etichetta associata deve essere emesso solo quando vengono soddisfatte determinate condizioni, che è quasi sempre se il valore non è nullo.

Le opzioni che posso pensare è utilizzare un response.write per ridurre al minimo l'utilizzo dei tag di script ASP o per formattare la pagina Web in modo tale che l'etichetta venga visualizzata con un valore di tipo n/appropriato appropriato.

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

risposta

8

Se si fanno uso della classe DisplayFormatAttribute in System.ComponentModel.DataAnnotations è possibile controllare in modo esplicito l'uscita di valori nulli nella vista senza trattare con tag script inline. Di per sé ciò non ti aiuterà a rimuovere le etichette legate al valore, ma puoi almeno farlo sostituire automaticamente un output se il valore è nullo.

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

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

Con il codice precedente verrà visualizzato automaticamente "N/A" se il valore è nullo, altrimenti visualizzerà il valore utilizzando il formato valuta predefinito.

In alternativa, se si desidera rimuovere anche l'etichetta e non si desidera gestire tag di script nella visualizzazione, è possibile creare il proprio HtmlHelper che prende un'espressione nello stesso formato di Html.DisplayFor(expression) e quindi restituisce la combinazione output di un Html.LabelFor(expression) e Html.DisplayFor(expression) se e solo se il valore associato a quell'espressione non è nullo.

+3

perdonate la mia ignoranza, se questo non è il caso, questo è solo una supposizione: potresti usare una stringa vuota "" invece di "N/A" per 'NullDisplayText', e inserire l'etichetta all'interno di' DataFormatString' (come "Balance: {0: c}") e e ottenere ciò che l'OP sta chiedendo? – Funka

+1

Probabilmente funzionerebbe perfettamente. Ottima idea –

2

Se ti infili il "Balance" all'interno della stringa di formato, e utilizzare Response.Write, si finisce per guardare molto più pulito, penso:

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