• 转:asp.net框架中异步调用后台方法进行提交或更新


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

    结束运行。

  • 相关阅读:
    冒泡排序
    【leetcode 简单】第二十二题 对称二叉树
    【leetcode 简单】第二十一题 相同的树
    【leetcode 简单】第二十七题 二叉树的最小深度
    【leetcode 简单】第二十三题 二叉树的最大深度
    python 版本zabbix_sender
    C语言二分查找
    【leetcode 简单】第二十题 合并两个有序数组
    【leetcode 简单】第十九题 删除排序链表中的重复元素
    【leetcode 简单】第十八题 爬楼梯
  • 原文地址:https://www.cnblogs.com/neekerss/p/1816649.html
Copyright © 2020-2023  润新知