2009-06-25 15 views
13

Estoy tratando de ponerme en línea C# para trabajar en mis archivos JavaScript usando MVC Framework. Hice este pequeño código de prueba.Usando Inline C# dentro de Javascript Archivo en MVC Framework

$(document).ready(function() { 
    alert(<%= ViewData["Message"] %>); 
}); 

Cuando se usa este código dentro de la vista, funciona perfectamente. Cuando salgo de mi vista aspx y pruebo esto en un archivo JavaScript obtengo un carácter XML ilegal. Me imagino que esto es por diseño en MVC Framework, pero no he podido encontrar ningún material sobre esto en la web.

¿Alguien ha recibido C# en línea para trabajar en archivos JavaScript usando MVC Framework?

Respuesta

14

Como han dicho otros, el C# no está siendo procesada por el servidor.

Una posible solución sería tener una vista separada que use el mismo modelo y las salidas de JavaScript, luego haga referencia a esa vista en su <script type="text/javascript" src="yourJSview.aspx"></script>.

Agregado según SLaks' answer:

Establecer el tipo de contenido a text/javascript, y puso su fuente de JavaScript directamente por debajo de la<%@ Page Directiva (sin una etiqueta de <script>).

Ten en cuenta que no obtendrás ningún IntelliSense en VS.

+2

solución brillante –

+1

Creo que es posible resolver el problema intellisense faltante, http://stackoverflow.com/questions/1045451/using-inline-c-inside-javascript-file-in-mvc-framework/3268088#3268088 – 7wp

3

Que el servidor tenga que procesar el C# en línea para que tenga sentido. Naturalmente, no funcionará con un archivo JavaScript simple.

+0

que pensé como mucho, pero tenía la esperanza que podría haber algo por ahí. Estoy tratando de obtener mi clase html helper que me da buenos enlaces absolutos para trabajar en los archivos javascript. Oh, bueno –

1

cuando se tiene el código C# en un archivo separado e incluirlo en su opinión el servidor no procesa el código, el archivo de script será llamado por el navegador y la secuencia de comandos en línea vaya a ser tratada como una cadena sencilla

alternativamente puede probar el script runat = server al incluir el archivo de script, pero no estoy seguro de los efectos de este

4

. Los archivos aspx son los archivos de vista de MVC framework. El marco solo representa las vistas y vistas parciales. No creo que exista una forma de usar el código del lado del servidor dentro de los archivos javascript.

Puede incluir su mensaje en un campo oculto

<%-- This goes into a view in an .aspx --%> 
<%= Html.Hidden("MyMessage", ViewData["Message"]) %> 

y el uso que dentro de su archivo javascript:

// This is the js file 
$(document).ready(function() { 
    alert($("#MyMessage").attr("value")); 
}); 
+0

Creo que esta es realmente la mejor solución que he visto. Otra alternativa sería tener una url a la que pudiera acceder para escupir el mensaje o la información del enlace que estoy buscando. Entonces podría usarlo a voluntad. –

+2

@Serhat: O en la vista y $ (document) .ready (function() {alert (msg);}); en el archivo JS. Un punto importante tanto en su solución como en mi sugerencia, si "Mensaje" puede contener comillas o caracteres de nueva línea, se debe tener especial cuidado para evitarlos, de lo contrario corre el riesgo de romper la entrada oculta en su solución o la asignación de la variable JavaScript en mi sugerencia. –

2

Su servidor web no procesa archivos .js, solo los sirve al cliente. Esto está en contraste con .aspx u otros tipos de archivos ASP.NET. Sus archivos son interpretados por su servidor antes de que sean entregados al cliente.

4

Puede hacer una vista ASPX que represente JavaScript.

Establecer el tipo de contenido a text/javascript, y poner su fuente de JavaScript directamente por debajo de la<%@ Page Directiva (sin una etiqueta de <script>).

Ten en cuenta que no obtendrás ningún IntelliSense en VS.

+1

Esta es una idea genial, pero en la práctica, ¿por qué alguien querría hacer esto, a menos que el resultado de la vista aspx que contiene el javascript podría almacenarse en caché? Porque si no, esto es lo mismo que insertar el código del script directamente en la página principal donde se usa. ¿Me equivoco? – 7wp

+1

@Roberto: ¿Y si es utilizado por varias páginas? – SLaks

+1

Bueno, en ese caso sí. Para reutilizar, esta es una gran manera de resolverlo. Pero estaba pensando más en la línea de replicar la capacidad de caché de los archivos JavaScript externos tradicionalmente incluidos. – 7wp

0

Estoy de acuerdo con Serhat.Lo mejor es renderizar un campo HTML oculto o, como se menciona a Al, ir a una URL para ello. Esto se puede hacer a través de un servicio web o incluso una implementación IHttpHandler. Entonces podría usar una url como "messages.axd? Id = 17".

4

Para añadir a Grant Wagner's answer y SLaks's answer, en realidad se puede engañar a Visual Studio para que te den IntelliSense en su solución, así:

<%if (false) {%><script type="text/javascript"><%} %> 
// your javascript here 
<%if (false) {%></script><%} %> 

En su solución se requiere que cuando se presta a la página que hay no sean etiquetas <script>, pero eso tiene un efecto secundario que apaga JavaScript IntelliSense en Visual Studio. Con lo anterior, Visual Studio le dará IntelliSense y, al mismo tiempo, no procesará las etiquetas <script> cuando se ejecuten.

2

Esta es una vieja pregunta, pero para aquellos que tropiezan con google en el futuro, la mejor solución es usar atributos data- * para pasar las variables. Se podría usar un elemento oculto, pero también podría usar la etiqueta <script> y darle una identificación única.

un ejemplo completo es respondida aquí: https://stackoverflow.com/a/18993844/1445356

Cuestiones relacionadas