用ASP.NET開發的人對伺服器端控制項事件引起的頁面重新整理很頭痛吧! Not在此把Not在做一個項目時的解決方案拿出來與大家共用。 Not的思路是事件執行完後寫段指令碼,讓頁面自動滾動到重新整理頁面之前的控制項處,減少頁面重新整理帶來的不便。 比如按了一個按鈕後,指令碼會自動將頁面自動滾動到這個按鈕的位置。 寫段指令碼的事情Not用了一個ScriptHelper的類來搞定,這個類有個GetViewControlScript(string controlName)的方法,它返回是一段用戶端的指令碼,傳入的參數就是這個控制項的ID。 ScriptHelper類代碼: /// <summary> /// 提供一些產生頁面指令碼的方法 /// </summary> public class ScriptHelper { /// <summary> /// 擷取用戶端查看控制項的指令碼 /// </summary> /// <param name="controlName"></param> /// <returns>指令碼代碼</returns> public static string GetViewControlScript(string controlName) { //建立用戶端函數ViewObj string script = "/n"; script += "<script language=/"javascript/">/n"; script += "function ViewObj(objName)/n"; script += "{/n"; script += "var obj = document.all.item(objName);/n"; script += "if (obj != null)/n"; script += "{/n"; script += "/tobj.scrollIntoView();/n"; script += "/tobj.focus();/n"; script += "}/n"; script += "}/n"; //建立用戶端函數ToDo script += "function ToDo()"; script += "{/n"; script += string.Format("setTimeout(/"ViewObj('{0}')/",1000);/n", controlName); script += "}/n"; script += "window.onload = ToDo;/n"; script += "</script>/n"; return script; } } 使用樣本: 為了方便輸入指令碼,我在頁面上放了個Label:lblScript,並把lblScript的EnableViewState屬性和Visible屬性設成False。 然後在lblScrpt的Click事件的作業碼後添加輸入指令碼的代碼,如下所示: private void btnSave_Click(object sender, System.EventArgs e) { project.UpdateProjectInfo(ds); lblScript.Text = ScriptHelper.GetViewControlScript("btnSave"); } 在點擊btnSave按鈕後,頁面會自動滾動到btnSave的位置,減少了頁面重新整理帶來的不便。 |