以下控件代码并不能触发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的例子