2011-01-29 83 views
0

我有一個用戶控件,通過彈出窗口(JQuery)顯示,該用戶控件從數據庫獲取一些數據並顯示它們(記錄的詳細信息)。如何使彈出窗口的內容只有在出現時纔會回發

問題是,這個用戶控件爲了父頁的每個回發獲取數據,即使它被隱藏了。

我不知道是否只有在出現彈出窗口時才能使其獲取其數據。

我試圖把它Panel內側falseVisible屬性,並將其更改爲true當我打開彈出,但它還是老樣子調用的Page_Load從數據庫獲取數據!

任何想法!

回答

1

當用戶激活彈出窗口並用從請求中檢索到的值填充彈出窗口時,觸發ajax請求。

2

有幾種方法可以解決這個問題。

1.在服務器端做所有事情。 您可以使用ajax(之前的地圖集)工具包的模式dilog。把它放在更新面板中。創建一個觸發器並在該觸發器中指定事件 - 這將是何時執行對db的調用。它只會發生一次,並且您將完全控制您何時想要做到這一點。

2.使用客戶端ajax。 我喜歡這種方式,因爲使用UpdatePanel(性能)有很多開銷。 保持jQuery UI模態對話框的完整,使用客戶端事件在打開時掛鉤它。然後,你就必須要麼做一個阿賈克斯調用一個Web服務(可以在aspx頁面內被託管),或者你可以做一個不用彷徨:

$.ajax({ 
     url: url, 
     data: data, 
     success: success, 
     dataType: dataType 
    }); 

$.get('ajax/MyDbRecord.aspx', function(data) { 
     $('.result').html(data); 
     alert('Load was performed.'); 
    }); 

那麼你的aspx頁面可以簡單地:

Response.Write(MyRepository.GetDetail(q => q.ID == 1234).ToString()); Resonse.End();

當然,如果您只需要在模態對話框中將該數據顯示爲簡單的字符串,並且不需要在業務方面檢查對象。

在這裏詳細描述這兩種API的: http://api.jquery.com/jQuery.get/

現在,如果你真的想和你正在從數據庫中檢索詳細記錄做一些定製的,你可能要考慮使用的getJSON。 更多示例:

http://viralpatel.net/blogs/2009/04/jquery-ajax-tutorial-example-ajax-jquery-development.html