轉:asp.net架構中非同步呼叫後台方法進行提交或更新

來源:互聯網
上載者:User

在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];
   }

結束運行。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.