2009-05-06 63 views
4

我正在使用ASP.NET MVC項目和jQuery來處理異步請求。有時候對於一個異步請求,我需要一個初始化JavaScript代碼片段來返回並與一個HTML代碼片段一起執行(我想讓這個JavaScript在服務器上呈現)。如何在ASP.NET MVC項目中模擬ScriptManager.RegisterStartupScript()

現在我使用我自己的ScriptsHelper類和RegisterStartupScript()方法(將數據添加到HttpContext.Current.Items)。然後,在異步請求的global.asax HttpApplication.EndRequest()中,我將所有註冊的腳本附加到輸出中(用標籤包含)。 jQuery.fn.load()在接收到的HTML附加到DOM時成功執行它們 - 這正是我所需要的。你認爲這是「正確的」(好的)解決方案嗎?或者你可以提出更好的建議?謝謝。

回答

1

在我開始使用jquery之前,我遇到了類似的情況,最終使用了eval()。我正在返回一個javascript文本片段,作爲不可見DOM元素的值的一部分,以及插入到DOM中的HTML的其餘部分。

我在IE6中調試這種類型的動態生成的JavaScript時遇到了很多麻煩,所以這個解決方案對我來說算得上體面,因爲我可以檢查得到評估的DOM元素的值。但是,我一直對使用eval持懷疑態度。

聽起來像你的解決方案有一個合理的服務器端渲染架構,而不是我的意大利麪條代碼,這種技術看起來像適合jQuery.fn.load的精神,所以我不擔心太多了。

0

是的,我認爲jQuery在你的內部調用eval() - 你使用append嗎?我認爲這種技術大部分時間都運行得很好。如果從服務器返回的數據位於重複列表中,則可能需要查看使用添加到jQuery 1.3的實時功能。它允許您將事件附加到與選擇器匹配的所有當前和將來元素。結帳這些文章:

另外,作爲別的東西要考慮的是一個tool to help manage scripts and css for asp.net mvc。我一直在使用它,我喜歡它,因爲它結合了文件並壓縮它們。你也可以從你的web config配置它。