2010-01-08 11 views
0

La question:passe asp.net code javascript base de données

Est-il possible que je puisse passer une fonction JavaScript dans une page (à partir d'une base de données) à exécuter?

Informations générales

J'ai développé un méta-données axée sur asp.net site web mvc (essentiellement je modifier les données dans la base de, et les pages sont générées à la volée).

Malheureusement j'ai une page qui a des exigences de routage (par exemple, si vous choisissez l'option 1, puis cache point x)

je pourrais résoudre ce problème en ayant une page personnalisée, mais ce serait bien si je pouvais venir avec une solution plus robuste. Donc, ce que je pense est que je peux attacher un gestionnaire d'événement onchange (basé sur une valeur de métadonnées), et puis avoir du code qui est exécuté en fonction de cet événement onchange.

Répondre

1

Vous pouvez avoir le code côté serveur javascript rendu statique oui, mais vous ne pouvez pas changer le javascript quand le client en raison d'une modification des exigences; vous devez rendre le code JS suffisamment dynamique pour gérer toutes les interactions que vous pourriez avoir à faire. Par code côté serveur, cela signifie tout code ainsi que toute ressource externe (base de données). Bien, je ne suis pas sûr stocker le code JS statique dans le DB est vous acheter quelque chose de plus que vous pourriez déjà avoir en stockant la JS dans un fichier, et ayant des composants JS assez intelligents pour avoir ces différentes interactions dans ce fichier ...

Alors oui le stockage côté serveur peut rendre en JavaScript statique, mais JS ne peut pas changer de code côté serveur dynamique, à moins que votre code JS appeler un service web sur le côté serveur.

Avez-vous du sens?

+0

oui, je crois. Je comprends votre point de vue sur le JS étant dans la base de données; si j'avais les composants JS assez intelligents pour gérer les différentes interactions que je ne (mais dans ce cas, je construirai essentiellement un moteur de règles, ce qui est la meilleure option, mais au-delà de la portée du projet) Alors, comment pouvez vous rendez le côté serveur JavaScript statique? Est-ce que vous venez de produire un fichier .js à la volée que la page lit alors? –

+0

MVC, n'est-ce pas? chaîne js = ""; Dans MVC, vous devez probablement faire monter le JS du contrôleur vers le modèle dans cette approche (les formulaires Web sont différents, vous utilisez Page.ClientScript pour gérer ces besoins).Et puis vous écrivez simplement le contenu de cette façon. J'y pensais et je vois ce que vous voulez dire. Si vous construisez cette dynamique d'un système, il peut être logique de stocker dans DB, s'il y a beaucoup d'interactions et ne veut pas avoir un fichier JS gonflé. –

1

Ce n'est pas vraiment la chose la plus sûre à faire, mais en utilisant JavaScript's eval() function, vous pouvez passer ce que vous voulez et le faire fonctionner. Une autre idée consiste à générer un fichier javascript sur le serveur (que ce soit en l'obtenant à partir de la base de données ou d'une autre méthode), et sur la page, ajoutez une balise script qui appelle un gestionnaire (fichier ashx) qui rend le fichier javascript.

Sur le client, vous auriez ce javascript:

var h = document.getElementsByTagName("head")[0]; 
var js = document.createElement("script"); 
js.type = "text/javascript"; 
js.src = "scriptfilegenerator.ashx"; 
h.appendChild(js); 

Et sur le serveur (fichier ashx) vous auriez ce code:

context.Response.AddHeader("content-disposition", "inline; filename=scriptfile.js"); 
context.Response.ContentType = "text/javascript"; 

context.Response.Write("your script here"); 
Questions connexes