2012-05-16 6 views
6

Sto provando a utilizzare un operatore ternario in Razor, simile a this question, ma quello che voglio produrre contiene spazi. Questo codiceUtilizzo dell'operatore ternario per l'output di una stringa contenente spazi in Razor

@(selectedGoal == null ? "" : "value=" + selectedGoal.Name) 

dovrebbe produrre

value="Goal 3" 

come il valore della selectedGoal.Name è "Obiettivo 3". Invece, ottengo

value="Goal" 3 

che non va bene. Ho provato un sacco di diverse combinazioni di citazioni fuggiti, simboli @ e non @ simboli, e non riesco proprio a farlo funzionare, cioè

@(selectedGoal == null ? "" : "value=" + "selectedGoal.Name") 
@(selectedGoal == null ? "" : "[email protected]") 

e poi ho appena ottenere qualcosa di simile

value="selectedGoal.Name" 

Qualcuno sa come dovrebbe essere fatto?

+0

Nulla si sta mostrando produrrebbe questi risultati. Chiaramente, il problema è in qualunque cosa imposta il valore di selectedGoal.Name. –

+0

Io uso 'selectedGoal.Name' altrove nella pagina e funziona perfettamente, senza virgolette o altro. – wohanley

+0

Qualcosa sta mettendo quelle citazioni, e il codice che hai mostrato non lo sta facendo. –

risposta

9

L'attributo value non contiene le proprie virgolette, quindi vengono aggiunte automaticamente prima dello spazio. Prova a spostare value all'esterno dell'espressione.

value="@(selectedGoal == null ? "" : selectedGoal.Name)" 
+0

Esce come segue: 'value =" " Obiettivo "2 "". – wohanley

+0

@wohanley, non sono sicuro da dove sarebbero venuti quei set di virgolette extra. ".Name" contiene effettivamente le virgolette come parte della stringa? – Brandon

+0

Davvero, davvero non dovrebbe, ma se questo rasoio è corretto, allora forse questa è l'unica possibilità: effettuerò il triplo controllo. – wohanley

0

Che dire

@(selectedGoal == null ? "" : "value=\"" + selectedGoal.Name + \") 

Oppure si può provare rendendoli direttamente come un blocco di HTML, usando il mio metodo su Html literal in Razor ternary expression