2010-08-11 45 views
0

我使用MVC 2和默認視圖引擎來使用JQuery Ajax .get()方法返回.ascx部分視圖。部分視圖中有一些JavaScript,我發現JavaScript的行爲是不穩定的,有時會執行,而其他時間則不會。我在另一個論壇上遇到了來自MS程序經理的回覆,其中包含以下內容:MVC Ajax PartialViews不會觸發Javascript - 我應該使用Spark嗎?

「當您使用新的HTML更新DOM時,瀏覽器不會自動在新的HTML位執行腳本。將需要解析部分HTML並嘗試並執行腳本,這是非常棘手的,也是我們目前不做的。「

我知道我可以使用jQuery實時事件作爲解決方法,但我想知道,這是特定於默認視圖引擎的問題,並且像Spark這樣的視圖引擎可以解決問題嗎?我以前從未使用過其他視圖引擎?謝謝您的幫助 !

回答

0

我使用現場活動解決了問題到底。重要的一點是,在我的情況下,我加載MVC部分視圖,其中一些部分視圖具有相同的元素ID。這意味着現場活動與多個元素綁定併發射多次。在返回新的局部視圖之前,我呼叫現場解除現場事件之前,我知道呼叫已經死亡。

0

不,在這種情況下使用不同的View引擎將無濟於事。這是瀏覽器級別發生的事情。簡單地說,您的AJAX調用會向服務器請求一些HTML標記,然後將這段標記動態注入到當前頁面的DOM中。正如引用的那樣,這個操作在默認情況下不會執行任何可能包含在該標記中的新JavaScript。

+0

感謝marcind,這對我來說看起來不太合適,也就是說在javascript工作中注入標記。有沒有辦法解決這個問題,而沒有現場活動? – 2010-08-12 17:19:55

1

如果你使用jQuery,你可以做一個小小的黑客來讓你的Javascript通過使用.live()函數來觸發。

比方說,您在您的partialView一個<div class="javascriptTrigger"></div>元素,你應該能夠一個jQuery添加到您的Site.Master是這樣的:

$(document).ready(function(){ 
    $(".javascriptTrigger").live("load", function(){ 
    // Do some javascript 
    }); 

}); 

的.live()函數listenes在變化DOM並在觸發器匹配時附加事件處理程序。

可能是一個可能的解決方案,您的問題

+0

嗨Yngve,我已經嘗試過現場活動,但我發現我的'點擊'事件在前兩次觸發,但它然後停止射擊? – 2010-08-12 17:53:37