2012-08-03 11 views
5

No estoy seguro si esto es posible o no, pero aquí está mi escenario:ejecución de código serverside desde JavaScript

En unos 10 de nuestros archivos aspx tenemos la misma función de JavaScript, quiero quitar esto de todas estas páginas y poner en el archivo javaScript principal (main.js) que es global para todas las páginas, por lo que es más fácil de mantener. el código JavaScript en las páginas aspx actuales es como la siguiente:

var regEx_gaid = <%= regEx["regEx_gaid"] %>; 
var regEx_wCard = <%= regEx["regEx_wildCard"] %>; 
var regEx_fCss = <%= regEx["regEx_flattenCss"] %>; 
var regEx_iCss = <%= regEx["regEx_inlineCss"] %>; 
... 

function doSomething() { 
    // do something with those variables declared above. 
} 

No estoy seguro de cómo obtener los valores del lado del servidor para esas variables en main.js.

También esto también puede ser relevante:

"expresiones regulares" dentro de <%= regEx["regEx_gaid"] %> es una colección de diccionarios en el lado del servidor y "regEx_gain" es la clave para acceder al valor del diccionario de expresiones regulares.

Gracias.

Respuesta

1

Puede tener una página ASP separada que simplemente muestre el contenido de sus variables. Luego puede hacer una solicitud de AJAX a esa página desde javascript.

usando jQuery para la taquigrafía:

var regEx_gaid = ""; 

$.get('regex_gaid.aspx', function(data) { 
    regEx_gaid = data; 
}); 
+0

Gracias. Me gusta esta solución, y la probé y funciona, pero todavía tengo curiosidad por ver si es posible hacerlo sin crear una página aspx adicional. – Sammy

1

En sus páginas, puede crear estos Javascript vars dinámicamente en cada página utilizando RegisterStartupScript:

this.ClientScript.RegisterStartupScript(this.GetType(), "MainVars", "var regEx_gaid = '" + regex_gaid.ClientID + "';", true); 

Utilizamos este mecanismo ampliamente: registrar las variables de control en código subyacente (que se emiten en cada página), pero luego los consume en un script central (similar a su main.js).

+0

I Modifed mi pregunta, pero en el interior de expresiones regulares <% = regex [ "regEx_gaid" ]%> es una colección de diccionarios en el lado del servidor y "regEx_gain" es la clave para acceder al valor del diccionario regEx. – Sammy

+0

Debe ser el mismo concepto: si ya está jalándolo en js usando la sintaxis que está mostrando, entonces simplemente modifica la secuencia de comandos que yo había mostrado. Si esta es la primera vez que intenta enviar el diccionario al cliente, lo más probable es que necesite crear una estructura json en el servidor y asignarlo a esa variable en el script de inicio (también hacemos esto). –

1

¿Se puede añadir un main.js.aspx continuación, mover los scripts en main.js a main.js.aspx, y el uso main.js.aspx como un archivo JavaScript?

main.js.aspx:

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="main.aspx.cs" Inherits="TempProject.js.main" %> 
var regEx_gaid = <%= regEx["regEx_gaid"] %>; 
var regEx_wCard = <%= regEx["regEx_wildCard"] %>; 
var regEx_fCss = <%= regEx["regEx_flattenCss"] %>; 
var regEx_iCss = <%= regEx["regEx_inlineCss"] %>; 

CodeBehind:

protected void Page_Load(object sender, EventArgs e) 
    { 
     Response.ContentType = "application/javascript"; 
    } 

Otros archivos:

<script type="text/javascript" src="js/main.js.aspx"></script> 
+0

La página principal de aspx es accedida por toda la aplicación, no parece muy optimizada para que ese código aparezca en todas las páginas. – Sammy

+0

Me refiero a agregar un nuevo 'main.js.aspx', y usarlo como un archivo js. – Charlie

+0

ahh gotcha, sí, eso también funcionará, aunque todavía tendré que ir a todas esas páginas y hacer referencia al nuevo archivo. – Sammy

Cuestiones relacionadas