none
服务器控件中如何区分事件? RRS feed

  • 问题

  • 比如说我们自己写了一个服务器控件,

    这个控件上有A和B两个按钮,

    当用户点击A或者B时,页面要进行回传,

    我如何在回传后捕捉到并区分,如果是点的A,那么执行a();如果是点的B,那么执行b();

    2010年3月25日 10:45

答案

  • protected void Page_Load(object sender, EventArgs e)
    {
        Response.Write(this.GetPostBackControlId());   
    }
    
    /// <summary>
    /// 获取引起回发的按钮 Id
    /// </summary>
    /// <returns></returns>
    public string GetPostBackControlId()
    {
        string postBackControlId = Request.Form["__EVENTTARGET"];
    
        if (string.IsNullOrEmpty(postBackControlId))
        {
            foreach (string clientId in Request.Form)
            {
                Button b = this.FindControl(clientId) as Button;
    
                if (b != null && b.UseSubmitBehavior)
                {
                    postBackControlId = b.ClientID;
                    break;
                }
            }
        }
    
        return postBackControlId;
    }

    知识改变命运,奋斗成就人生!
    • 已标记为答案 m s 2010年3月29日 8:06
    2010年3月26日 1:36
    版主
  • 楼主你好,

    你最好装个httpwatch,这样当你在客户端提交的时候什么数据被回传给服务器一目了然了。

    当前ASP.NET里面有两种button,一种类似于submit这种,你通过触发submit的时候它的id会被回传到服务器端,你可以用Request.form获得。

    另外一种是直接把它的id放到隐藏字段“__EVENTTARGET”传回服务器的,所以上面的版主才会有两种判断。

    一种是直接Request.Form["__EVENTTARGET"],还有一种就是循环Request.Form.Keys,根据Key来查找看是否是它触发的。

     


    Microsoft Online Community Support
    • 已标记为答案 m s 2010年3月29日 8:06
    2010年3月29日 2:47

全部回复

  • protected void Page_Load(object sender, EventArgs e)
    {
        Response.Write(this.GetPostBackControlId());   
    }
    
    /// <summary>
    /// 获取引起回发的按钮 Id
    /// </summary>
    /// <returns></returns>
    public string GetPostBackControlId()
    {
        string postBackControlId = Request.Form["__EVENTTARGET"];
    
        if (string.IsNullOrEmpty(postBackControlId))
        {
            foreach (string clientId in Request.Form)
            {
                Button b = this.FindControl(clientId) as Button;
    
                if (b != null && b.UseSubmitBehavior)
                {
                    postBackControlId = b.ClientID;
                    break;
                }
            }
        }
    
        return postBackControlId;
    }

    知识改变命运,奋斗成就人生!
    • 已标记为答案 m s 2010年3月29日 8:06
    2010年3月26日 1:36
    版主
  • 楼主你好,

    你最好装个httpwatch,这样当你在客户端提交的时候什么数据被回传给服务器一目了然了。

    当前ASP.NET里面有两种button,一种类似于submit这种,你通过触发submit的时候它的id会被回传到服务器端,你可以用Request.form获得。

    另外一种是直接把它的id放到隐藏字段“__EVENTTARGET”传回服务器的,所以上面的版主才会有两种判断。

    一种是直接Request.Form["__EVENTTARGET"],还有一种就是循环Request.Form.Keys,根据Key来查找看是否是它触发的。

     


    Microsoft Online Community Support
    • 已标记为答案 m s 2010年3月29日 8:06
    2010年3月29日 2:47