首页 新闻 会员 周边

触发回传事件的问题

0
悬赏园豆:50 [待解决问题]

以下控件代码并不能触发IPostBackEventHandler接口的RaisePostBackEvent
方法,能请教一下原因吗?(本例重在试验原理)
(因为控件只输出<span>标签,所以是不能post的,但是因为
增加了RegisterRequiresRaiseEvent(this),按道理应该是可以触发的
本人在调试时用带name的<input type='text'/>是可以的)

(另:使用控件的页面用html控件 submit提交)


using System;
using System.Collections.Generic;
using System.Text;

namespace MyControl
{
  //如果定义类时不用public 则从工具箱拖控件时会提示:无效的formatetc结构,页面没有出现控件!
  public class postdataEventButton:System.Web.UI.WebControls.WebControl,System.Web.UI.IPostBackEventHandler
  {

  protected override void OnPreRender(EventArgs e)
  {
  this.Page.RegisterRequiresRaiseEvent(this);

  base.OnPreRender(e);
  }

   

  protected override void Render(System.Web.UI.HtmlTextWriter writer)
  {
  base.Render(writer);

  //writer.Write("<input id='" + this.ClientID + "'" + " name='" + this.UniqueID + "'" + " type='text' value='测试3' />");
  writer.Write("<span>3测试IPostBackEventHandler事件</span>");
  }


  #region IPostBackEventHandler 成员

  public void RaisePostBackEvent(string eventArgument)
  {
  OnPostBackEvent(EventArgs.Empty);
  }

  #endregion

  public event EventHandler PostBackEvent;

  protected virtual void OnPostBackEvent(EventArgs e)
  {
  if (this.PostBackEvent != null)
  {
  PostBackEvent(this, e);
  }
  }


  }
}


我的意思是说,根据微软的文档实现回传事件的前提是:

1、实现IPostBackEventHandler 接口;

2、回传的键值对中有控件的name(即服务器端id:UniqueID)
  如果没有,则可以调用RegisterRequiresRaiseEvent(this),来触发。

但是没有回传name/value时,调用RegisterRequiresRaiseEvent(this),却触发不了?

另: 因为实现回发数据事件,即IPostBackDataHandler接口中如果控件生成的html不会post,可以调用
     this.Page.RegisterRequiresPostBack(this),这样也能调用到LoadPostData
     我这里就想,RegisterRequiresRaiseEvent和RegisterRequiresPostBack的情况不是类似的吗?
    下面我再举一个IPostBackDataHandler的例子


hao9993的主页 hao9993 | 初学一级 | 园豆:6
提问于:2011-03-09 09:55
< >
分享
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册