在内容页中调用母版页控件响应控件消息(用户控件服务器控件有所不同)

Posted 杰的记事本——javascript.shop

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在内容页中调用母版页控件响应控件消息(用户控件服务器控件有所不同)相关的知识,希望对你有一定的参考价值。

原文发布时间为:2009-11-13 —— 来源于本人的百度文章 [由搬家工具导入]

总结来源百度贴吧

在内容页中调用母版页控件
在内容页中有个属性Master,可以通过它访问母版页。如我们要修改母版页上的标题,我们看到显示标题的那个Label的ID为Label1,在Page_Load事件中增加以下代码:

protected void Page_Load(object sender, EventArgs e)

{

if (!IsPostBack)

((Label)Master.FindControl("Label1")).Text = "标题被修改了!";

}     /*本人注: 有一句htmlGenericControl divlinks = (HtmlGenericControl)Page.Master.FindControl("links");   这里的HtmlGenericControl好像是表示Html一般控件?

运行看一下标题是否被修改。

2、是服务器控件或者凡是runat=server的控件,其ClientID在页面输出后,都跟在设计时不一样了。例如有个

<input type="text" id="txtName" runat="server" />

但输出后,却变成了

<input type="text" id="ctl00_Main_txtName" />

如果你原本在javascript里如下引用:document.getElementById("txtName");现在多半找不到了。可以沿用ASP的做法:

document.getElementById("<%=txtName.ClientID%>");


3、内容页要访问母版页上的控件不象同一页那么方便。

需要用Page.Master.FindControl();的方式,例如,

TextBox txt = (TextBox)Page.Master.FindControl(“txtName”);

假如要访问的控件是用户控件,这样写

MyCtrl myctrl = (MyCtrl)Page.Master.FindControl(“MyCtrl1”);

多半会编译出错,说缺乏MyCtrl的定义。原因是该控件在母版页上声明:

<%@ Register Src="myCtrl.ascx" TagName="myCtrl" TagPrefix="uc1" %>

一般情况下在内容页就不用再声明了。但如果要访问它就不同,也要在内容页的头部加上这一句。并没有重复声明的麻烦。

4、要支持在母版页上的控件事件怎么办?

比如说,我要在内容页支持我自己写的用户控件MyCtrl(在母版页)的OnClick事件该怎么办?总不能将代码写在母版页吧?

别忘了,事件本质是委托,我们只要在内容页添加对该事件的委托就行了。

以前1.1的时候,代码页面有Page_Init事件的代码,可2.0就不知道跑哪去了。幸而自己加上去也有效:

protected void Page_Init(object sender, EventArgs e)

{

MyCtrl myctrl = (MyCtrl)Page.Master.FindControl(“MyCtrl1”);

if (myctrl != null)

{

myCtrl.Click += new MyCtrl.ClickEventHandler(MyCtrl1_Click);

}

}

转自:http://blog.csdn.net/sendling/archive/2008/07/11/2637281.aspx



以上是关于在内容页中调用母版页控件响应控件消息(用户控件服务器控件有所不同)的主要内容,如果未能解决你的问题,请参考以下文章

母版页

如何从母版页中的控件调用 javascript 函数?

如何从母版页上的用户控件访问母版页中定义的数据集?

asp.net 中母版页、用户控件中属性的调用、赋值方法求解。

母版页中的 webpart 控件

asp.net 如何从具有嵌套母版页的内容页更改父母版页中的控件