2009年4月24日 星期五

ASP.NET無接縫傳值頁面處理後續-如何重新整理來源頁面?

問題說明:
 當我們使用了無接縫傳值撰寫模式,完成Master/Detail的編修資料後,大部份的情況都需要重新整理來源頁的頁面,才能立即顯示修正後的資料。在這種情況下要如何處理?
可能方法包含:
1.使用window.opener.location.reload();
2.呼叫來源頁的重整功能。
這兩個方法中,window.opener.location.reload();會產生是否要重整的確認視窗,而且整個網頁重新進入一次,使用上比較不經濟。第二個方法可以配合AJAX把握重點,只整理需要的頁面。
個人習慣使用第二種方法。

我的作法:
 1.在來源頁上配置一個ImageButton的Control。語法如下:
 <asp:imagebutton id="refreshBU" alternatetext="頁面重整" imageurl="~/Images/refresh.png" oncommand="refreshBU_Command" runat="server">
 2.加入一個doRefresh()的javascript function(),語法如下:
 function doRefresh() { doClickId("<%=refreshBU.ClientID %>"); }
 doClickId()在ASP.NET無接縫傳值撰寫模式中已建立。
 3.撰寫refreshBU_Command事件處理機制,可能是重新Binding GridView。
 4.彈出的頁面中加入編修或處理結束後來源頁的功能呼叫。語法如下:
 <script type="text/javascript">
 function confirmSave(){
 alert('回應資料已存檔,頁面即將關閉!');
 window.opener.doRefresh();
 window.open('', '_parent', '');
 window.close();
 }
 </script> 

2009年4月20日 星期一

一個關於ASP.NET RadioButtonList 控制元件操作上的注意事項

問題說明:
在ASP.NET的環境中操作RadioButtonList 控制元件時,如果在伺服端預設SelectedIndex時;例如設定了SelectedIndex=0,當使用者於網頁上點選第一項以外的選項時,SelectedIndexChanged的事件可以正常運作,但時回點第一項選項時發現無法啟動SelectedIndexChanged的事件。
也就是說在伺服端預設的SelectedIndex後,會導致該選項沒有SelectedIndexChanged的事件。

解決方法:
必須於網頁OnLoad或OnFocus時,使用Javascript定義預設的選項,不能在伺服端預設選項。
下面是我的作法:
window.onfocus = function() {
 var ctrl = document.getElementById("<%=RadioButtonList1.ClientID%>" + "_0");
 ctrl.checked = true;
};