【www.gdgbn.com--php函数】

由用户触发

 callback的一般使用方法还算简单,直接参照msdn的帮助和范例就足够了。但是想要真正用好、用精,或者想开发一些基于callback机制的web组件,那么,就要先深入了解callback的实现机制了。在本文中,teddy将和您一起解析callback的整个调用、反馈机制,相信对于帮助您更好的使用callback,将能有一定的益处




" />







    在button的 onclick 中写入:
    onclick="<%= clientscript.getcallbackeventreference(this,"document.getelementbyid("txtusername").value","oncallback",null) %>"  在网页特效中编写相应的函数
    function oncallbacknobtn()
    {
    callserver(document.getelementbyid("txtusername").value,"");
    }
    在 xxx.asp教程x.cs 中继承 icallbackeventhandler  并实现其方法。
    public partial class webpage_callbackbtn : system.web.ui.page, icallbackeventhandler
    {
    protected string struserinfo; //callback最终得到的信息
    protected void page_load(object sender, eventargs e)
    {
    }

    #region icallbackeventhandler 成员

    public string getcallbackresult()
    {
    return struserinfo;
    }

    public void raisecallbackevent(string eventargument) //服务端的处理函数
    {
    if (eventargument == "") return;
    system.data.sqlclient.sqlconnection conn = new system.data.sqlclient.sqlconnection();
    conn.connectionstring = system.web.configuration.webconfigurationmanager.connectionstrings["nowthwindconnectionstring"].connectionstring;

    sqlcommand cmd = new sqlcommand();
    cmd.commandtype = commandtype.text;
    cmd.parameters.add("@firstname", sqldbtype.nvarchar, 10)
    .value = eventargument;
    cmd.commandtext = "select employeeid, lastname from employees where firstname=@firstname";
    cmd.connection = conn;

    sqldatareader reader;
    connectionstate previousconnectionstate = conn.state;

    try
    {
    if (conn.state == connectionstate.closed)
    {
    conn.open();
    }

    reader = cmd.executereader();

    using (reader)
    {
    while (reader.read())
    {
    // process sprocresults datareader here.
    struserinfo += reader[0];
    }
    }
    struserinfo += "###";
    }
    finally
    {
    if (previousconnectionstate == connectionstate.closed)
    {
    conn.close();
    }
    }
    }

    #endregion
    }

    raisecallbackevent() 负责接收 client 端的javascript 所传送过来的参数,以此参数查询数据库教程中的数据,最后由 getcallbackresult() 将结果传回 client端的javascript,最后将结果显示出来。 完成  o(∩_∩)o~ 现在在 textbox 中输入 nancy 则会显示 1### 。如果输入的名字在数据库中没有则不显示,(我的只是完成了《圣殿祭司的asp.net教程》中的这一节的一部分)
②自动触发。
    如上 3. 在 xxx.aspx.cs 中继承 icallbackeventhandler  并实现其方法。 在 javascript中添加
    <script type="text/javascript">
    function dosearch(){
    var txtfirstname= document.getelementbyid("txtusername");
    callserver(txtfirstname.value,"");
    }

    function receiveserverdata(txtuserinfo)
    {
    results.innertext=txtuserinfo;
    }

    var int=self.setinterval("dosearch()",5000);
    </script>
    在 aspx.cs 中动态注册 javascript
    protected void page_load(object sender, eventargs e)
    {
    string cbreference = page.clientscript.getcallbackeventreference(this,"arg", "receiveserverdata", null);
    //page.clientscript.getcallbackeventreference(this,"arg", "receiveserverdata", null);
    string callbackscript;
    callbackscript = "function callserver(arg,context){" + cbreference + "};";
    //string callbackscript = "function callserver(arg,context){webform_docallback("__page",arg,receiveserverdata,null,null,false)};";
    page.clientscript.registerclientscriptblock(this.gettype(), "callserver123", callbackscript, true);
    }
    完成
<script type=text/javascript> if ($ != jquery) { $ = jquery.noconflict(); } var islogined = false; var cb_blogid = 78559; var cb_entryid = 1981812; var cb_blogapp = "xaingliu"; var cb_bloguserguid = "6140f7ce-2929-df11-ba8f-001cf0cd104b"; var cb_entrycreateddate = "2011/3/11 21:02:00"; </script>

本文来源:http://www.gdgbn.com/jiaocheng/29417/