浅谈Asp.Net母版页的相关知识

2019-05-25 09:58:02刘景俊

2、“<asp:Content ……>”就是要在其中显示的内容。

一、在母版页中编写后台代码,访问母版页中的控件:

与普通的aspx页面一样,双击按钮即可编写母版页中的代码

二、在内空页面中编写后台代码,访问内容页面中的控件:

与普通的aspx页面一样,双击按钮即可编写母版页中的代码

三、在内容页面中编写代码访问母版页中的控件:

在内容页面中有个Master对象,它是MasterPage类型,它代表当前内容页面的母版页。通过这个对象的FindControl方法,我们可以找到母版面中的控件,这样就可以在内容页面中操作母版页中的控件了。

TextBox txt = (TextBox)((MasterPage)Master).FindControl(“txtMaster”);
txt.Text = this.txtContent1.Text; ;

四、在内容页面中编写代码访问母版页中的属性和方法:

仍可能通过Master对象进行访问,只不过在这里要把Master对象转换成具体的母版页类型,然后再调用母版页中的属性和方不法。

这里要说明的是:母版页中要被内容页面调用的属性和方法必须是Public修改的。否则无法调到。

假设母版页中有下面的属性和方法:

public string TextValue 

   {

get

{

return this.txtMaster.Text;

}

set

{

this.txtMaster.Text = value;

}

}

public void show(string str) 

   {

txtMaster.Text = str;

}

在内容页面中可以通过下代的代码来实现对母版页中方法的调用:

((MasterPage_MP)Master).show(this.txtContent1.Text);

((MasterPage_MP)Master).TextValue = this.txtContent1.Text;

五、在母版页中访问内容页面的控件:

在母版页中可以通过在ContentPlaceHolder控件中调用FindControl方法来取得控件,然后对控件进行操作。

((TextBox)this.ContentPlaceHolder1.FindControl(“txtContent1″)).Text = this.txtMaster.Text;

六、在母版页中访问内容页面中的方法和属性:

在母版页中调用子页面中的属性和方法有点难度,因为我们无法像上一步中那样通过FindControl来找到方法和属性。

于是我们想到在母版面的声明指示符中加入下面的代码:

<%@ Reference Page=”~/MasterPage/Show1.aspx” %>

在运行的时候回发现有错误,错误的内容是“无法实现循环引用”。这是因为默认在子页面中引用了母版页,你也就不能再在母版页中引用子页面了。

我在网上也没找到更好的解决方法,但这使我们想起C#是的“反射”,它可以使我们动态获取页面对象,并且可以调用它的属性和方法。

代码如下:

Type t = this.ContentPlaceHolder1.Page.GetType();

PropertyInfo pi = t.GetProperty(“ContentValue”); //获取ContentValue属性

pi.SetValue(this.ContentPlaceHolder1.Page,this.txtMaster.Text,null); //给属性赋值

MethodInfo mi = t.GetMethod(“SetValue”); //获取SetValue()方法

object[] os = new object[1]; //建造输入参数

os[0] = txtMaster.Text;

mi.Invoke(this.ContentPlaceHolder1.Page, os); //调用SetValue方法