Anthem.net

Anthem.net

Anthemnet是一種新的AJAX技術,它主要是提供了一個新控制項庫,庫中包含了大量常用控制項,如ButtonCalendar、CheckBox等等,到目前為止為ASP.NET提供了24種新控制項,實用於ASP.NET 1.0 和 ASP.NET 2.0 。

基本介紹

  • 中文名:Anthem.net
  • 外文名:Anthem.net
  • 實質:一種新的AJAX技術
  • 提供內容:一個新控制項庫
  • 舉例:Button、Calendar、CheckBox
定義,簡介,

定義

Anthemnet是一種新的AJAX技術,它主要是提供了一個新控制項庫,庫中包含了大量常用控制項,如ButtonCalendar、CheckBox等等,到目前為止為ASP.NET提供了24種新控制項,實用於ASP.NET 1.0 和 ASP.NET 2.0 。

簡介

Anthem.net的所有技術都是開源的。
Anthem.net技術的原理簡單介紹:
讓每個控制項都有獨立的信息提交能力,
比如在一個Button的Click事件中
private void Button1_Click(object sender, System.EventArgs e)
{
TextBox1.Text = "OK";
TextBox1.UpdateAfterCallBack = true;
}
運行的頁面上,你看不到刷新,TextBox1就改變了。
其實在編譯的過程中,由於我們使用的是Anthem.net控制項,它會自動產生大量的javascript腳本,來實現異步互動。
那么我們只需要和往常一樣在後台中寫每個事件下的操作,至於是不是異步互動,我們都不用管了。
不足的是,這個開源技術目前只是1.0版本,目前只有24種可用控制項,自定義控制項不能直接實現獨立提交的接口。
和傳統的ajax技術相比,它有以下優點:
1、不需要任何技術升級,以前不會使用ajax技術的人員,按照以往的編程方式就可實現異步互動
2、支持ASP.NET 1.0 和 ASP.NET 2.0
3、開源技術,如果深入研究,也能開發出自己的控制項
Anthem.NET的Callback方式。
一、普通的調用
<%@ Register TagPrefix="anthem" Namespace="Anthem" Assembly="Anthem" %>
<anthem:Button id="button" runat="server" Text="Click Me!" />
<anthem:Label id="label" runat="server" />
<script runat="server">
void button_Click(object sender, EventArgs e) {
label.Text = DateTime.Now.ToString();
label.UpdateAfterCallBack = true;
}
</script>
二、在回調前後添加自定義客戶端函式的執行邏輯
幾個常用的屬性:
PreCallBackFunction:用於定義回調前執行的函式,通常可以在這裡加入確認的判斷。
在這個函數裡 return false 將會取消回調。
PostCallBackFunction: 回調後執行的函式。
TextDuringCallBack: 用於定義回調過程中控制項顯示的提示信息(通常是提示等待的文字)
EnabledDuringCallBack: 在回調過程中,控制項是否禁用。
CallBackCancelledFunction: 如果回調被取消,則會調用這個函式。
代碼例子:
<anthem:Button id="button1" runat="server" Text="Click Me!" TextDuringCallBack="Working..." EnabledDuringCallBack="false" PreCallBackFunction="button1_PreCallBack" PostCallBackFunction="button1_PostCallBack" CallBackCancelledFunction="button1_CallBackCancelled" />
<script language="javascript" type="text/javascript">
// 回調之前,可在這裡取消回調
function button1_PreCallBack(button) {
if (!confirm('Are you sure you want to perform this call back?')) {
return false;
}
document.getElementById('button2').disabled = true;
}
// 回調完成後
function button1_PostCallBack(button) {
document.getElementById('button2').disabled = false;
}
// 取消回調後
function button1_CallBackCancelled(button) {
alert('Your call back was cancelled!');
}
</script>
注意以上這些客戶端處理函式中,都可以傳遞 control 本身作為參數,因此在必要的情況下這些函式是可以被重用的。(比如對一組類似的控制項的回發事件進行處理)
三、調用伺服器頁面的方法
伺服器端需要做的事情:
[Anthem.Method]
public int Add(int a, int b) {
return a + b;
}
void Page_Load() {
Anthem.Manager.Register(this);
}
<input id="a" size="3" value="1">
<input id="b" size="3" value="2">
<button onclick="DoAdd(); return false;" type="button">Add</button>
<input id="c" size="6">
// 參數的含義依次是:
// 伺服器方法的名字,
// 方法的參數(以 js 數組形式傳遞),
// 伺服器端方法返回結果時調用的回調函式(因為是異步模式)。
Anthem_InvokePageMethod(
'Add',
[document.getElementById('a').value, document.getElementById('b').value],
function(result) {
document.getElementById('c').value = result.value;
}
);
調用後,在回調函式的參數中得到的 result 變數,是一個包含 value 和 error 兩個屬性的對象。如果在伺服器端發生錯誤,則 value 為 null, 而 error 中包含錯誤數據。
四、如何處理回調時可能發生的異常
在頁面中定義 Anthem_Error js 函式,則可處理所有回調時的未處理異常。
<script type="text/javascript">
function Anthem_Error(result) {
alert('Anthem_Error was invoked with the following error message: ' +
result.error);
}
</script>
異常也可以在伺服器端處理。只要定義下列名稱的方法:
void Page_Error()
{
Anthem.Manager.AddScriptForClientSideEval("window.location = 'http://anthem-dot-net.sf.net/'");
}
在伺服器端處理有一些額外的好處,主要是可以將異常信息記錄到日誌.
五、頁面跳轉
在 Callback 的處理中,不能用 Response.Redirect 來處理頁面跳轉,因為這些函式是通過 js 的無刷新來調用的。代替的辦法是用 Anthem.Manager 回傳一段 js 給客戶端去用 eval 的方式執行,從而達到頁面跳轉的效果(推而廣之,這個 eval 的功能當然不限於跳轉頁面,可以乾很多其他的事情)。
代碼示例:
Anthem.Manager.AddScriptForClientSideEval("window.location = 'http://anthem-dot-net.sourceforge.net/';");
六、幾個全局級別的客戶端回調函式
我們可以在客戶端定義幾個特殊名字的函式,以供 Anthem 在每一次回調的前後調用。這些函式包括:
Anthem_PreCallBack(),
Anthem_CallBackCancelled(),
Anthem_PostCallBack(),
除此之外還包括前面說到的 Anthem_Error() 等。
這裡典型的一個套用場景是,在每次回調開始後,我們在 Anthem_PreCallBack() 中創建一個“loading”信息的層,然後在取消(Anthem_CallBackCancelled) 或成功回調後(Anthem_PostCallBack),移除這個層。
這樣可以很方便的模擬出類似 Gmail 中的載入效果。
七、回調過程中向頁面添加了新的 js 腳本
這種情況下必須設定一個額外的屬性:
Anthem.Manager.IncludePageScripts = true;
例子:
<script runat="server">
protected void button1_Click(object sender, EventArgs e)
{
HtmlButton button = new HtmlButton();
button.InnerText = "Now click me!"
button.Attributes["onclick"] = "ThankYou();"
placeholder1.Controls.Add(button);
placeholder1.UpdateAfterCallBack = true;
string script = @"<script type=""text/javascript"">
function ThankYou() {
alert('Thank you!');
}
</" + "script>"
#if V2
Page.ClientScript.RegisterClientScriptBlock(typeof(Page), script, script);
#else
Page.RegisterClientScriptBlock(script, script);
#endif
Anthem.Manager.IncludePageScripts = true;
}
</script>
八、PreUpdate 事件
控制項在 Render 之前,如果 UpdateAfterCallBack 為 true,則會引發這個事件。
目前這個事件的用途似乎不大。
大致的了解了一下Anthem.NET,感覺還是蠻不錯的,至少在目前的套用中,已經足夠了。:)

相關詞條

熱門詞條

聯絡我們