1.asp教程x文件:
public void setlabel(string str)
{
this.label1.text = str; ;
}
ascx文件;
protected void button1_click(object sender, eventargs e)
{
system.web.ui.page p = this.page;
type pagetype = p.gettype();
methodinfo mi = pagetype.getmethod("setlabel");
mi.invoke(p, new object[] { "test!!!" });}
2. 在自定义控件中定义这个控件的属性
public control labeltext
{
get{return this.label1.text;}
}
label lbl = (label)webusercontrol1.findcontrol("label1");
4。委托
(利用事件委托实现用户控件中的行为触发所在页面的处理函数 )
在日常的工作中,我们时常会遇到这样的需求:点击一用户控件中的服务器按钮,变更页面上该用户控件以外某处的数据显示。这样就需要在发生该按钮点击行为时,触发其所在页面的相应处理函数。在vb.net中,我们可以利用raiseevent语句来引发定义在所在页面后台代码文件中的相应处理方法,而在c#中,我们可不可以做到这点呢?
回答当然是肯定可以实现的。c#中我们可以利用事件委托来达到同样的效果。
下面,让我们来一步步地解决这个问题。
1、首先,在一aspx页面中包含一用户控件(raisecontrol.ascx),该用户控件内只含有一服务器端控件。
2、在该用户控件的后台代码中声明事件委托、定义事件成员并添加一事件监视函数。代码如下:
//声明事件委托
public delegate void pagechangeeventhandler(string ps教程deliver);
//定义事件
public event pagechangeeventhandler mypagechange;
//监视事件
protected void onpagechange(string psstr)
{
if (mypagechange != null)
{
mypagechange(psstr);
}
}
3、在用户控件的按钮事件中,触发已经定义的mypagechange事件。
protected void btnraise_click(object sender, eventargs e)
{
string _sstr = "你点击了用户控件中的按钮!";
onpagechange(_sstr);
}
protected void page_load(object sender, eventargs e)
{
//利用+=进行事件委托绑定//注意不得包含在if(ispostback)或者if(!ispostback)的里面
ctlraisecontrol.mypagechange += this.dealwithreceived;
}
/**////
/// 为用户控件中mypagechange事件定义的处理函数
///
///
private void dealwithreceived(string psreceive)
{
lblreceive.text = psreceive;
}
机制分析:c#中,委托是一种引用类型。对于一声明委托,我们可以将任意与之具有相同返回类型和参数列表的函数绑定到其上,也就是使该委托指向绑定的具体方法,这一点类似于c++中的函数指针。在以上的示例中,我们同样是将页面后台定义的dealwithreceived方法绑定到了用户控件中声明的pagechangeeventhandler委托上,只不过在委托与具体方法函数之间又隔了一层,这就是“事件”。
.net事件机制是建立在委托基础之上的。可以说,事件是对委托的封装,这主要是基于面向对象的封装机制。在这里,无论是对委托的绑定,还是对委托指向方法的调用,都是通过event来实现的。
5。aspx页面给ascx页面的控件动态绑定方法
aspx页面:
protected void page_load(object sender, eventargs e)
{//注意不得包含在if(ispostback)或者if(!ispostback)的里面
dropdownlist ddlmerchant = (eggmerchants1.findcontrol("ddlmerchant") as dropdownlist);
ddlmerchant.autopostback = true;
ddlmerchant.selectedindexchanged += new eventhandler(bindegg);}
protected void bindegg(object sender, eventargs e)
{
ddleggs.items.clear();
ddleggs.items.add(new listitem("--请选择蛋--", "-1"));
listinfo = new eggservice().queryeggbymerid(-1, eggmerchants1.merchantid);
if (info != null)
{
foreach (egginfo item in info)
{
ddleggs.items.add(new listitem(string.format("{0}({1}-{2})", item.eggname, item.begindate.date, item.enddate.date), item.rowid.tostring()));
}
}
}
我的博物馆故事 官方安卓版v1.61.2
我的博物馆故事是一款以消除为主题的经营养成类手游,在这里玩家
专业模拟飞行10 手机版v12.2.4
专业模拟飞行10安卓版是一款飞行休闲手游,顶尖的物理飞行引擎
动物起义战斗模拟器二琳同款 最新版v4.1.1
动物起义战斗模拟器是一个非常有趣的模拟类游戏,玩家可以召唤各
迷你世界七周年 安卓手机版v1.43.0
迷你世界7周年是一款由《迷你世界》官方推出的庆祝特别版本,在
劫后公司无限资源版 v1.0.5.1
劫后公司内置菜单版是游戏的破解版本,在该版本中为玩家提供了内