2010-01-08 37 views
0

問題:asp.net通從數據庫javascript代碼

是否有要運行的方式,我可以通過JavaScript函數到頁面(從數據庫)?

背景信息

我開發了一個元數據驅動的asp.net的MVC網站(基本上我更改數據在數據庫中,和網頁被實時生成)。

不幸的是我有一個網頁,有一些路由的要求(例如,如果您選擇選項1,然後隱藏項x)

我可以有一個自定義頁面解決這個問題,但是這將是很好,如果我能來提供更強大的解決方案。

所以我在想,我可以附加一個onchange事件處理程序(基於元數據值),然後以某種方式有一些基於onchange事件執行的代碼。

回答

1

您可以讓服務器端代碼呈現靜態javascript yes,但由於需求發生變化,您無法在客戶端上更改JavaScript;你必須呈現足夠動態的JS代碼來處理你可能需要做的所有交互。通過服務器端代碼,這意味着任何代碼以及任何外部資源(即數據庫)。雖然,我不知道存儲在數據庫中的靜態JS代碼,你買任何東西比你更可能已經被存儲在JS文件,並有足夠的聰明,有一個文件中,這些不同的交互JS組件...

所以,是服務器端存儲可以呈現出靜態的JavaScript,但JS無法從服務器端代碼動態改變,除非你的JS代碼中調用服務器端的Web服務。

有意義嗎?

+0

是的,我是這麼認爲的。 我把你的觀點放在JS正在數據庫中;如果我有足夠的智慧來處理不同的相互作用,我不會JS的組件(但在這種情況下,我會基本上建立一個規則引擎,這是最好的選擇,但超出了項目範圍) 因此,如何能你渲染靜態Ja​​vaScript服務器端?你是否剛剛生成一個.js文件,然後頁面就會讀取? –

+0

MVC,對吧?字符串js =「」;在這種方法中,您可能會將JS從控制器推送到模型(Web表單不同;您使用Page.ClientScript來管理這些需求)。然後你只需要以這種方式寫出內容。我正在考慮這個問題,我看到了你的觀點。如果你正在構建一個系統的動態,那麼存儲在數據庫中是否有意義,如果有很多交互並且不想擁有一個臃腫的JS文件。 –

1

它不是最安全的事情,但使用JavaScript's eval() function,你可以通過任何你想要的,並讓它運行。

另一個想法是在服務器上生成一個JavaScript文件(無論是通過從數據庫還是通過其他方法獲取它),並在頁面上添加一個腳本標記,該標記調用一個處理程序(ashx文件) JavaScript文件。

在客戶端,你將有此javascript:

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

和服務器(ashx的文件),你將有這樣的代碼:

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

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