动态接受消息的问题

  现在碰到问题:触发web的一个方法,但是无法再方法中修改页面       

   想用委托写个接受消息的例子:

  

      

1.MessageEventArgs(是事件参数)

  

ExpandedBlockStart.gif 代码
  ///   <summary>
    
///  消息中心的Args
    
///   </summary>
     public   class  MessageEventArgs:EventArgs
    {
        
///   <summary>
        
///  接受消息的用户名
        
///   </summary>
         private   string  userName;

        
public   string  UserName
        {
            
get  {  return  userName; }
            
set  { userName  =  value; }
        }
        
///   <summary>
        
///  消息内容
        
///   </summary>
         private   string  msg;

        
public   string  Msg
        {
            
get  {  return  msg; }
            
set  { msg  =  value; }
        }

        
public  MessageEventArgs( string  userName,  string  msg)
        {
            
this .userName  =  userName;
            
this .msg  =  msg;
        }
    }

 

2.MessageManage类消息管理

 

ExpandedBlockStart.gif 代码
  public   class  MessageManage
    {
        
private   static  MessageManage m;
        
///   <summary>
        
///  创建一个私有的构造函数(使其单例)
        
///   </summary>
         private  MessageManage()
        {
 
        }
        
// 只能通过这个方法访问此类的对象
         public   static  MessageManage Get()
        {
            
if  (m  ==   null )
            {
                m 
=   new  MessageManage();
            }
            
return  m;
        }

        
///   <summary>
        
///  消息处理委托
        
///   </summary>
        
///   <param name="sender"> 事件触发者 </param>
        
///   <param name="e"> 事件参数 </param>
         public   delegate   void  MessageDelegate( object  sender, MessageEventArgs e);
        
///   <summary>
        
///  消息事件
        
///   </summary>
         public   event  MessageDelegate MessageEvent;
        
///   <summary>
        
///  触发事件
        
///   </summary>
        
///   <param name="e"> 事件参数 </param>
         protected   virtual   void  OnMessageEvent(MessageEventArgs e)
        {            
            MessageEvent(
this , e);
        }
        
///   <summary>
        
///  有消息进入
        
///   </summary>
        
///   <param name="msg"> 消息内容 </param>
        
///   <param name="useName"> 消息接受者 </param>
         public   void  ShowMessage( string  msg, string  useName)
        {
           MessageEventArgs e
= new  MessageEventArgs(useName, msg);
           OnMessageEvent(e);
        }
    }

 

3.页面后台代码

 

ExpandedBlockStart.gif 代码
public   partial   class  _Default : System.Web.UI.Page
    { 
       
        
protected   void  Page_Load( object  sender, EventArgs e)
        {
            
if  ( ! IsPostBack)
            {
                
// 第一次打开注册事件
                MessageManage.Get().MessageEvent  +=   new  MessageManage.MessageDelegate(ShowMsg); 
            }
        }

        
///   <summary>
        
///  触发事件后被调用的方法(问题就在这里,虽然调用了,但不能改变页面)
        
///   </summary>
        
///   <param name="sender"></param>
        
///   <param name="e"></param>
         public   void  ShowMsg( object  sender, MessageEventArgs e)
        {
            
// 此处Seesion["userName"]为123
             if  (e.UserName  ==  Session[ " userName " ].ToString())
            {            
                Page.ClientScript.RegisterStartupScript(
this .GetType(),  " ggg " " <script>MyFun(' " + e.Msg + " ');</script> " );
            }
        }
        
///   <summary>
        
///  这是Ajax方法,调用方法时会触发事件,通知所有注册事件的方法,并调用
        
///   </summary>
        
///   <param name="msg"></param>
        [AjaxMethod]
        
public   static   void  Send( string  msg)
        {             
            MessageManage.Get().ShowMessage(
" 我发送的 " , " 123 " );
        }              
    }

 

现在问题:1:这个思路是不是本身就有问题,问题在哪里,可以改进吗

              2:是不是web不发送请求,就不能调用页面的JS方法,或者改变页面元素

 

转载于:https://www.cnblogs.com/chongzi/archive/2010/04/21/1716965.html

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值