2011-07-29 18 views
5

Suponiendo que tengo un ayudante tales como:Razor ayudante declarativa utilizado como Javascript cadena

@helper AddErrorSpan(string error) 
{ 
    <span class="error">@error</span> 
} 

corro a cuestiones que tratan de llamar al ayudante en javascript. Por ejemplo:

if ($('#YearTextBox').val() == "") 
{ 
     $('#ErrorDiv').append('@AddErrorSpan("Year field is required.")'); 
} 

Esta falla y provoca un error de sintaxis JavaScript porque el ayudante devuelve una nueva línea al final. Esto ocasiona que el '); que se arrastra se empuje a la línea siguiente, lo que causa el error de sintaxis. ¿Hay algo que pueda hacer para remediar esto fácilmente? Actualmente, la solución fácil es hacer que el ayudante sea así.

@helper AddErrorSpan(string error) 
{<span class="error">@error</span>} 

Como no hay un descanso antes de la } cerrar la nueva línea no se devuelve desde el ayudante y no hay error de sintaxis JavaScript. Esto es un poco molesto y feo de ver. ¿Hay alguna manera de evitar que el ayudante devuelva la línea nueva cuando se llama en mi método javascript?

Respuesta

4

Debe codificar con Javascript la cadena llamando al HttpUtility.JavaScriptStringEncode al llamar al ayudante.

Esto escapará de la línea nueva como \r\n, que a su vez será inofensivamente tragado por el analizador HTML.

$('#ErrorDiv').append('@HttpUtility.JavaScriptStringEncode(AddErrorSpan("Year field is required.").ToString())'); 
+0

detallado :(¿Por qué tiene que ser tan prolijo – Raynos

+1

. @Raynos: si lo desea, puede crear un ayudante con un nombre más corto que invoque este método. – SLaks

1

Puede también utilizar AjaxHelper.JavaScriptStringEncode:

@Ajax.JavaScriptStringEncode(value) 

o declarar un ayudante para que sea más sucinta:.

@helper JsEncode(string value) { 
    @(HttpUtility.JavaScriptStringEncode(value)) 
} 
Cuestiones relacionadas