在asp.net框架中如何調用AJAX,或者異步調用后臺方法進行提交或更新。
近段時間,公司有個項目需要做成象新浪網的股票信息那樣,實時進行刷新。經過摸索測試,下面把經驗進行分享:
一、在頁面的cs文件中,該類一定要實現: System.Web.UI.ICallbackEventHandler接口
即:繼承System.Web.UI.Page類,并實現 System.Web.UI.ICallbackEventHandler接口
然后在Page_Load方法內(或DataBind())中進行注冊:如下
//用于回調的
string callbackReference = ClientScript.GetCallbackEventReference(this, "arg", "ReceiveCallback", "context", false);
string callbackScript = string.Format("function CallServer(arg,context){{ {0}}}", callbackReference);
ClientScript.RegisterClientScriptBlock(this.GetType(), "CallServer", callbackScript, true);
解釋:
string callbackReference = ClientScript.GetCallbackEventReference(this, "arg", "ReceiveCallback", "context", false);
該代碼主要是注冊一個回調事件,其中context為頁面的div的ID值,主要是回調返回后需要重寫頁面的div的innerHtml(即控件)。
string callbackScript = string.Format("function CallServer(arg,context){{ {0}}}", callbackReference);
該代碼主要是通過回調事件訂制一個js方法,供頁面調用(可能相當于委托)
二、重寫ICallbackEventHandler接口的相應方法。
#region javascript異步調用,重寫rptList
public void RaiseCallbackEvent(string eventArgument)

{
//自己寫的數據綁定方法,取數據庫的數據,重新綁定到Repeater控件
BindData();
}

public string GetCallbackResult()

{
//返回再次綁定后的Repeater的表現內容
return RenderControl(this.rptBidding);
}

private string RenderControl(Control control)

{
StringWriter writer1 = new StringWriter(CultureInfo.InvariantCulture);
HtmlTextWriter writer2 = new HtmlTextWriter(writer1);
control.RenderControl(writer2);
writer2.Flush();
writer2.Close();
return writer1.ToString() + "@" + newLogId;
}
#endregion


三、頁面表現時,需要定義一個div,里面任何內容都可以。
<div id="context">
<asp:Repeater ID="rptBidding" runat="server">
<HeaderTemplate>
<div>頁面表現內容</div>
</HeaderTemplate>
<ItemTemplate>
<div>頁面表現內容</div>
</ItemTemplate>
<AlternatingItemTemplate>
<div>頁面表現內容</div>
</AlternatingItemTemplate>
</asp:Repeater>
</div>
在js中增加如下js方法,以供后臺調用。
function turnPage(pageIndex){
CallServer(pageIndex,'content');
}
//5秒刷新下,即取數據庫的值。重新綁定數據
setInterval(turnPage(1), 5000);
function ReceiveCallback(arg,context){
var array = new Array();
array = arg.split('@');
//重新編譯div的innerHTML
var container = document.getElementById('context');
container.innerHTML = array[0];
}
結束運行。
posted on 2008-12-23 14:55
aisoft 閱讀(1960)
評論(0) 編輯 收藏 所屬分類:
.NET技術