2012-05-16 18 views
6

Estoy tratando de usar un operador ternario en Razor, similar a this question, pero lo que quiero mostrar contiene espacios en blanco. Este códigoUsando el operador ternario para dar salida a una cadena que contiene espacios en blanco en Razor

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

debe producir

value="Goal 3" 

como el valor de selectedGoal.Name es "Objetivo 3". En cambio, obtengo

value="Goal" 3 

que no es bueno. He intentado un montón de diferentes combinaciones de cotizaciones escapado, @ símbolos y no hay símbolos @, y yo simplemente no puedo conseguir que esto funcione, es decir

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

y luego apenas consigo algo así como

value="selectedGoal.Name" 

¿Alguien sabe cómo hacer esto?

+0

Nada de lo que está mostrando producirían esos resultados. Claramente, el problema está en lo que establezca el valor de selectedGoal.Name. –

+0

Utilizo 'selectedGoal.Name' en otro lugar de la página y funciona bien, sin citas extraviadas ni nada. – wohanley

+0

Algo está colocando esas citas, y el código que ha mostrado no lo está haciendo. –

Respuesta

9

A su atributo de valor le faltan sus propias comillas, por lo que se agregan automáticamente antes del espacio. Intenta mover value fuera de la expresión.

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

Sale así: 'value =" " Objetivo "2 "". – wohanley

+0

@wohanley, no estoy seguro de dónde vendrían esos conjuntos de comillas adicionales. ¿'.Name' en realidad contiene las comillas como parte de la cadena? – Brandon

+0

Realmente, realmente no debería, pero si este Razor es correcto, entonces tal vez esa es la única posibilidad. Voy a verificar tres veces – wohanley

0

¿Qué hay de

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

O puede tratar de hacerlas directamente como un bloque HTML, usando mi método de Html literal in Razor ternary expression

Cuestiones relacionadas