2009-12-14 5 views
8

Tengo un código como éste en un archivo .aspx:"expresión Esperada" con <%=foo%> dentro JavaScript en el archivo .aspx

<script type="text/javascript" language="javascript"> 
function init() 
{ 
    <%= x %> 
} 

Funciona bien (x es una cadena que se une a algo de JavaScript en tiempo de ejecución), pero al compilar recibo una advertencia de "Expected expression" en el <% =

Sé que no es el código más bonito del mundo, pero hay varios bits históricos de código que les gusta inyectar pequeños trozos de JavaScript en la página. Todo perfectamente inocente :)

Respuesta

14

La advertencia está ocurriendo porque el bloque de código está dentro de un bloque de JavaScript <script>; el compilador intenta ser inteligente al reconocer la diferencia entre HTML/controles y JavaScript.

Aunque es un poco feo, usted debe ser capaz de eliminar la advertencia utilizando eval('<%= x %>')

También puede echar un vistazo a un artículo que escribí sobre el uso de ASP.NET para crear dinámica de JavaScript: http://www.12titans.net/p/dynamic-javascript.aspx

2

Si usted quería ser perfectamente legal, utilice un literal:

<asp:Literal ID="litX" runat="server"></asp:Literal> 

y establecer su Text al conjunto de bloque <script type="text/javascript" language="javascript">...</script> en el lado del servidor.

2

Visual Studio es validating the HTML markup en la página. Estrictamente hablando, el '<' no es XHTML válido. Esta advertencia puede ser causada por una limitación de la validación ya que Visual Studio está interpretando el carácter '<' dentro de javascript como 'menor que'.

Obviamente, estas expresiones en línea no son un código de cliente válido. Se pueden cambiar las opciones de validación de HTML en Herramientas | Opciones | Editor de texto | HTML. Eso sí, puede ser mejor simplemente ignorar estas advertencias en lugar de validar contra HTML 4.01 o desactivar la validación por completo.

2

Si todo lo que hace es agregar javascript a su página, puede usar RegisterClientScriptBlock para compilar la secuencia de comandos del lado del servidor y luego dejar que se la muestre en la página.

De esta manera no es necesario tener ningún script del lado del servidor dentro de su página y todos los gastos generales que eso conlleva.

2

He hecho esto antes y no he tenido problemas. Sin embargo, utilizo $ (document) .ready() de jQuery en lugar de init(). Aunque no creo que eso sea un problema.

¿Qué tipo de datos es x? Si es una cadena, intente envolverla entre comillas simples, y si es un número, use la función de análisis para ese tipo de datos.

<script type="text/javascript" language="javascript"> 
var s; 
var n; 
function init() 
{ 
    s = '<%= x %>'; 
    n = parseInt('<%= x %>'); 
    eval('<%= x %>'); /* Raw Javascript */ 
} 
</script> 

Otro problema sería el nivel de acceso de la propiedad. Los formularios web ASP.NET no pueden acceder a los campos privados directamente desde el código subyacente. El acceso debe ser protegido o público.

Eval Javascript Function

+0

La cadena contiene código JavaScript sin procesar, que quiero ejecutar. –

+0

, entonces también puedes usar eval ('string'); –

0

Encontré el problema que estaba teniendo con esto.

Parece que he comentado incorrectamente HTML encima del script.

<%-- <div id="directionpanel" ></div>--%> 

<script type="text/javascript"> 
    var LIST = <%= getJson()%>; 
</script> 

que estaba recibiendo la expresión esperada advertencia en getJSON()

correctamente al comentar el código HTML fijará la advertencia.

->
Cuestiones relacionadas