在已經發布的 ASPNET 中無刷新頁面開發相關部分同 beta 有不少改動而且在越來越多的 Ajax 開發包被開發出來的情況下 ASPNET 自帶的無刷新頁面技術沒有被很多人了解甚至不少人認為該功能有些雞肋但如果我們僅僅是在程序中加入很少部分的 Ajax 特性 Atlas AjaxNet 等就顯得有些殺雞用牛刀的感覺了而且我認為使用 ASPNET 提供的方法進行開發並不很復雜相反使用很少的代碼就可以做出來很棒的效果!
下面我來一步一步的帶大家開發無刷新的頁面!
第一步實現 ICallbackEventHandler 接口
ICallbackEventHandler接口位於SystemWebUI命名空間下在beta時ICallbackEventHandler只包含一個RaiseCallbackEvent方法即處理回調事件又返回處理結果在正式版中它變成了包含GetCallbackResult和RaiseCallbackEvent兩個成員方法第一個用來返回回調事件的結果第二個用來出來回調事件這個變化主要是為了編寫Web控件而做的改動具體可以看一下GridView等控件中的實現代碼
建立一個 Web 網站我們來修改 defaultaspxcs 文件
public partial class _Default : System
Web
UI
Page
ICallbackEventHandler
private string str;
public void RaiseCallbackEvent(string eventArgument)
{
//可以根據傳遞的參數不同
調用不同的處理邏輯
str =
從服務器端返回的內容
+ eventArgument;
}
public string GetCallbackResult()
{
return str;
}
第二步注冊回調方法
我們在 defaultaspx 頁面中添加一個 TextBox 一個 Label 和一個 Html 控件 Button 並給 Button 添加 onclick 事件
<asp:TextBox ID=
TextBox
runat=
server
></asp:TextBox>
<input id=
Button
type=
button
value=
提交到Label
onclick=
CallServer(TextBox
Label
)
/><br/>
<asp:Label ID=
Label
runat=
server
Text=
Label
:
></asp:Label>
<script type=
text/javascript
>
//由button調用
function CallServer(inputcontrol
context)
{
context
innerHTML =
Loading
;
arg = inputcontrol
value;
//注冊回調方法
<%= ClientScript
GetCallbackEventReference(this
arg
ReceiveServerData
context
)%>;
}
//在回調方法中注冊的接收返回結果的函數
function ReceiveServerData(result
context)
{
context
innerHTML = result;
}
</script>
好了一個無刷新的頁面就開發完了它可以將你在 TextBox 中輸入的文字通過服務器代碼寫回到頁面的 Label 中是不是很簡單?你可以運行一下你的程序看看效果啦!
下面我們來分析一下這些代碼
首先我們看
<%= ClientScript
GetCallbackEventReference(this
arg
ReceiveServerData
context
)%>;
ClientScript是System
Web
UI
Page對象的一個屬性
它是System
Web
UI
ClientScriptManager對象
用於管理客戶端腳本
GetCallbackEventReference方法用於注冊一個服務器端事件的客戶端回調
它的第四個參數
Context
非常重要
但在MSDN中並沒有相關的例子和詳細的說明
在我上面給的代碼中可以看到
調用CallServer方法時
傳遞的Context參數就是Label
而ReceiveServerData的第二個參數
Context
就是被傳遞過來的Label
在我的例子中
Context被我用於設定一個用來顯示服務端返回結果的控件
其實
你可以將任意的對象賦值給Context
它都會被傳遞給本地端處理回調返回結果的函數
這樣
你就可以根據調用前指定的
上下文
靈活的操作返回結果了!在我給出的完整例子中
你可以看到一個使用Context做的無刷新顯示GridView的例子
在這裡我要說個題外話Context這麼重要的參數在MSDN中不但沒有詳細的說明而且VS中文正式版MSDN中關於回調的例子竟然還是beta時的實現!這個版本的MSDN可以說是我用過的版本中品質最差的不過現在的MSND可以用相當龐大來形容出錯也是在所難免的希望下個版本的MSND會好一些
OK在ASPNET 中開發具有Ajax特性的東東不難吧!其實就是兩步
在Server端實現ICallbackEventHandler接口在接口包含的方法中根據傳遞的參數分別調用不同的處理方法然後返回結果;
在Client端注冊回調函數(當然你也可以在Server端注冊)然後實現處理回調結果的函數其中如果對Context能干靈活運行你就可以做出非常好的效果了
在我給出的完整例子中你們可以看到更完整的處理邏輯和更漂亮的特效當然增加的代碼還是很少的!
有將近一年沒有寫Blog了手也比較生了以前cnblogs的文章我是基本上天天都看的現在一兩個星期看一次就不錯了還是走馬觀花的浏覽幾篇而已如今每天都是為了生活而奔波人在江湖身不由己呀!
發了半天牢騷我也預告一下我會在最近寫一些介紹Atlas的文章其實Atlas也有很多人都寫過了不過大都是根據官方文檔的模式寫的而最近發布的幾版CTP變化挺大的(實現的功能也比較誘人!)對新特性介紹的文章比較少所以我就來獻丑了希望對大家使用Atlas有所幫助
From:http://tw.wingwit.com/Article/program/net/201311/12793.html