隨著Ajax等技術的發展,客戶端功能也逐漸變得越來越重要。如果在服務器控件中添加客戶端功能,將會創作出功能更強大,界面更豐富的服務器控件。
客戶端功能:
在Web編程中,客戶端功能傳統上是由Web頁開發人員負責,並且不被封裝在服務器組件中。ASP.NET脫離了這一范疇並使服務器控件能夠發出客戶端腳本,從而使服務器控件能夠將客戶端處理與服務器端處理結合起來。例如按鈕控件的OnClientClick屬性,就可以在其中聲明一段腳本在客戶端執行。
OnClientClick--->return confirm('Hello Word'),單擊按鈕時就會在客戶端彈出一個提示框。
實現客戶端功能的技術主要是客戶端腳本(JavaScript、VBScript等)和DHTML。這個想必大家都知道。
ASP.NET服務器控件中客戶端功能的實現:
下面我們進入正題,來看看ASP.NET服務器控件中是如何實現客戶端功能的:代碼如下:
namespace ServerClientControl
{
[DefaultProperty("Text")]
[ToolboxData("<{0}:SimpleButton runat=server></{0}:SimpleButton>")]
public class SimpleButton :Button
{
protected override void RenderContents(HtmlTextWriter output)
{
}
protected override void AddAttributesToRender(HtmlTextWriter writer)
{
base.AddAttributesToRender(writer);
writer.AddAttribute("onclick", "window.confirm('Hello World! ');");
}
}
}
我們創建一個繼承自Button的類,通過AddAttributesToRender()方法添加一個onclick客戶端事件。這樣就簡單的實現了向服務器控件添加客戶端事件的功能。
ClientScriptManager 類
當然,這只是簡單的方式。在 .NET Framework 2.0 版中為我們新增了ClientScriptManager 類。通過在網頁的 HTML 標記中包含腳本,可以聲明方式向網頁添加客戶端腳本。然而,有些情況下需要動態添加客戶端腳本。
實現復雜客戶端功能有關的幾個常用方法:
RegisterClientScriptBlock():向頁的頂部添加一個腳本塊。以字符串形式創建腳本,然後將其傳遞給方法,方法再將腳本添加到頁中。可以使用此方法將任何腳本插入到頁中。請注意,腳本可能在所有元素完成之前呈現到頁中;因此,您可能無法從腳本中引用頁上的所有元素。
RegisterClientScriptInclude():與 RegisterClientScriptBlock 方法類似,但此方法將添加引用外部 .js 文件的腳本塊。包含文件在任何其他動態添加的腳本之前添加;因此,您可能無法引用頁上的某些元素。
RegisterStartupScript():向頁中添加一個腳本塊,該腳本塊在頁完成加載後引發頁的 onload 事件之前執行。該腳本通常不創建為事件處理程序或函數;它通常只包含要執行一次的語句。
RegisterOnSubmitStatement():添加響應頁的 onsubmit 事件而執行的腳本。該腳本在提交頁之前執行,允許您取消提交。
IsStartupScriptRegistered():確定Page對象是否注冊了啟動腳本。
IsClientScriptBlockRegistered():確定Page對象是否注冊了客戶端腳本。
更詳細的說明講解大家可以參看MSDN。