ICallbackEventHandler与Microsoft.XMLHTTP

关于异步回调,最近做了一个简单的便签WebPart。用到了一些回调的东西,索性把这两个异步的知识点都用了一下。顺便巩固一下自己。
ICallbackEventHandler接口包括两个方法:

String GetCallBackResult(): 该方法的返回值将返回给前台等待接受信息的js 代码;
Void RaiseCallBackEvent(string eventArgument): 从前台的js 方法接受参数:eventArgument ,并进行处理,在该方法中可以对一个全局变量赋值,并且在GetCallBackResult() 方法中将该值返回给前台js 代码以进行结果的展示。

需要注意的一点是在页面或者底层空间Load的时候注入一段脚本。
string  cbReference  =  Page.ClientScript.GetCallbackEventReference( this " arg " " ReceiveServerData " " context " );
string  callbackScript;
callbackScript 
=   " function CallServer(arg, context) "   +   " "   +  cbReference  +   " } ; " ;
Page.ClientScript.RegisterClientScriptBlock(
this .GetType(),  " CallServer " , callbackScript,  true );

这段代码注入了一个CallServer的js方法,可以让在.aspx/.ascx页面中的js进行调用。
public   class  NotePadWebPart:TemplatedWebPart,ICallbackEventHandler
    
{
        
//CallBack产生的结果
        private string g_Result;
        
public string G_Result
        
{
            
get return g_Result; }
            
set { g_Result = value; }
        }


        
private NotePadService _NotePadServices;
        
private NotePadData _NotePadData;

        
private Literal _ltlTitle;

        
private TextBox txtNote;        

        
public NotePadWebPart()
        
{
            
this.ExportMode = WebPartExportMode.All;

            _NotePadServices 
= new NotePadService();
            _NotePadData 
= new NotePadData();
        }


        
WebPart CustomerAttributes#region WebPart CustomerAttributes

        
private bool _listShowHead = true;
        
private string _listImageUrl;
        
private int _imgHeight;
        
private int _imgWidth;

        [WebPartStorage(Storage.Shared), DefaultValue(
true), Category("显示设置")]
        [Personalizable]
        [WebBrowsable]
        [WebDisplayName(
"显示标题图文")]
        
public bool ListShowHead
        
{
            
set { _listShowHead = value; }
            
get return _listShowHead; }
        }


        [WebPartStorage(Storage.Shared), DefaultValue(
""), Category("显示设置")]
        [Personalizable]
        [WebBrowsable]
        [WebDisplayName(
"标题图片地址")]
        
public string ListImageUrl
        
{
            
set { _listImageUrl = value; }
            
get return _listImageUrl; }
        }


        [WebPartStorage(Storage.Shared), DefaultValue(
10), Category("显示设置")]
        [Personalizable]
        [WebBrowsable]
        [WebDisplayName(
"标题图片高度")]
        
public int ListImageHeight
        
{
            
set { _imgHeight = value; }
            
get return _imgHeight; }
        }


        [WebPartStorage(Storage.Shared), DefaultValue(
10), Category("显示设置")]
        [Personalizable]
        [WebBrowsable]
        [WebDisplayName(
"标题图片宽度")]
        
public int ListImageWidth
        
{
            
set { _imgWidth = value; }
            
get return _imgWidth; }
        }


        [WebPartStorage(Storage.Shared), DefaultValue(
""), Category("皮肤名称")]
        [Personalizable]
        [WebBrowsable]
        [WebDisplayName(
"皮肤文件名")]
        [WebDescription(
"例如skin-defaultskin.ascx")]
        
public virtual string SkinName
        
{
            
get
            
{
                
return skinName;
            }

            
set
            
{
                skinName 
= value;
            }

        }


        
#endregion



        
protected override String ExternalSkinFileName
        
{
            
get
            
{
                
if (!string.IsNullOrEmpty(skinName))
                    
return CreateExternalSkinFileName("MydeskTop", skinName);
                
return CreateExternalSkinFileName("MydeskTop");
            }

        }


        
protected override void OnLoad(EventArgs e)
        
{
            
base.OnLoad(e);
            
this.EnsureChildControls();

            
if (!Page.IsPostBack)
            
{
                DataBind();
                
string strCmd = Page.Request.QueryString["cmd"];
                
if (!string.IsNullOrEmpty(strCmd))
                    
this.Clear();
            }


            
string cbReference = Page.ClientScript.GetCallbackEventReference(this"arg""ReceiveServerData""context");
            
string callbackScript;
            callbackScript 
= "function CallServer(arg, context)" +
                
"" + cbReference + "} ;";
            Page.ClientScript.RegisterClientScriptBlock(
this.GetType(),
                
"CallServer", callbackScript, true);
            
        }


        
private void Clear()
        
{
            NotePadData data 
= new NotePadData();
            data.UserName 
= GetCurrentUser();
            data.Content1 
= "";
            data.ModifyTime 
= DateTime.Now;
            
if (_NotePadServices.Update(data))
            
{
                Page.Response.Write(
"");
                Page.Response.End();
            }
            
        }


        
public override void DataBind()
        
{
            
base.DataBind();

            
if (_listShowHead)
            
{
                _ltlTitle.Text 
= HtmlUtil.GetTitleImage(ListImageUrl, ListImageWidth, ListImageHeight,
                    
0false"""");
            }



            _NotePadData 
= _NotePadServices.FindData(GetCurrentUser());
            
if (_NotePadData != null)
            

                txtNote.Text 
= _NotePadData.Content1;
            }

        }


        
protected override void AttachChildControls()
        
{
            _ltlTitle 
= FindControl("ltlTitle"as Literal;

            txtNote 
= FindControl("txtNote"as TextBox;
            txtNote.Attributes.Add(
"onblur""TextOnBlur('" + txtNote.ClientID + "')");
        }


        
private string GetCurrentUser()
        
{
            
string username = Page.User.Identity.Name;

            
string[] str = username.Split('\\');

            
if (str.Length > 1)
            
{
                
return str[1];
            }


            
return str[0];
        }


        
ICallbackEventHandler 成员#region ICallbackEventHandler 成员

        
/**//// <summary>
        
/// 获取回调产生的结果
        
/// </summary>
        
/// <returns></returns>

        public string GetCallbackResult()
        
{
            
//_ltlNote.Text = g_strCallBackResult;
            return G_Result;
        }


        
/**//// <summary>
        
/// 执行回调
        
/// </summary>
        
/// <param name="eventArgument"></param>

        public void RaiseCallbackEvent(string eventArgument)//eventArgument为从TextOnBlur传回的参数,在这里是txtContent文本框内容
        {
            
//首先判断与上次的内容相比是否发生变化
            
            
//将文本框内容插入数据库

            NotePadData data 
= new NotePadData();
            data.UserName 
= GetCurrentUser();
            data.Content1 
= eventArgument;
            data.ModifyTime 
= DateTime.Now;
            

            
if (_NotePadServices.GetAmount(GetCurrentUser()) >= 1)//已存在
            {
                
if (_NotePadServices.Update(data))
                
{
                    G_Result 
= data.Content1;
                }

            }

            
else
            
{
                data.CreateTime 
= DateTime.Now;
                
if (_NotePadServices.Save(data))
                
{
                    G_Result 
= data.Content1;
                }

            }

        }


        
#endregion

    }


皮肤文件:
<% @ Control Language="C#"  %>
< script  type ="text/javascript" >
    
function TextOnBlur(txtId)
    
{
        
var txtContent = document.getElementById(txtId).value;
        
var hid = document.getElementById('txtLast');
        
if(txtContent == hid.value)
        
{
            
return;
        }

        hid.value 
= txtContent;
//回调服务器,即调用ICallBackEventHandler的RaiseCallBackEvent方法
        CallServer(txtContent, ""); 
    }

//rValue的值来自于GetCallBackResult返回的值    
    function ReceiveServerData(rValue)
    
{
        
var txt = document.getElementById('<%=txtNote.ClientID %>');
        txt.value
=rValue;
    }

    
    
function txtClear()
    
{
        
var txt = document.getElementById('<%=txtNote.ClientID %>');
        txt.value
="";
        
var url = "?cmd=cmd";
        
var xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
        xmlHttp.open(
"POST", url, false);
      xmlHttp.send(
"");
      result 
= xmlHttp.responseText;        
    }

</ script >
< table  width ="90%"  border ="0"  align ="center"  cellpadding ="0"  cellspacing ="0" >
  
< tr >  
    
< td  colspan ="4" >   < asp:Literal  ID ="ltlTitle"  runat ="server" ></ asp:Literal >  
    
</ td >
  
</ tr >
  
< tr >  
    
< td  width ="89%"  height ="35" >< span  style ="color:#003366;font-size:13px;" >< strong > 我的便签 </ strong ></ span ></ td >
    
< td  width ="11%" >
< input  id ="txtLast"  type ="hidden"   />
      
< href ="#"  onclick ="txtClear()"   >< span  style ="color:#FF0000" > [清空] </ span ></ a ></ td >
  
</ tr >
  
< tr >  
    
< td  colspan ="2"  style ="line-height:180%" >< asp:TextBox  ID ="txtNote"  runat ="server"  Height ="120px"  TextMode ="MultiLine"  Width ="98%"  style ="background:#fff;color:#333;border:1px #E7E7E7 solid;" ></ asp:TextBox ></ td >
  
</ tr >
</ table >

转载于:https://www.cnblogs.com/jerryshi/archive/2008/07/01/1233509.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值