尽管.NET的控件已经很多,但是自定义用户控件给我们提供了更为广阔的开发空间。合理的使用用户控件能给我们的开发带来很多好处和便捷。
但是用户控件和普通的页面又有一些差别,如果使得用户控件与页面以及用户控件之间的通信,可能成为大家使用用户控件一个必须要思考的问题。当然,用户控件的设计的初衷应该是功能相对独立的单元,某一个用户控件完成特定的某种职能,但是在实际的应用中,经常需要这种用户控件之间的通信。
最简单的方法:用Session将上传文件的值保存下来,然后在页面直接调用Session,当然这样做并非不可,但是会给你更新、清空这个Session而头疼。
当然你可以使用get方法进行页面传值,但是这样的局限性就更大了,一个控件是为了更多代码来使用的,这样有悖于用户控件设计的出发点。
我们可以通过反射解决这个问题,具体的代码实例:
在页面调用用户控件,用户控件的功能完成后,需要更新主页面。
Page nPage = this.Parent.Page;//首先获得用户控件所在的页面对象
Type pType = nPage.GetType();//获得该对象的类型
MethodInfo nMethod = pType.GetMethod("BindData");
//调用该类型下的某种方法,这里只提供了方法名。具体的方法,必须是public的无返回值的。
nMethod.Invoke(nPage, null);触发执行。这样也就让页面重新加载。
//nMethod.Invoke(p, new object[] { "参数1","参数2" });如果有参数
UserControl uc = nPage.FindControl("TempletList1") as UserControl;//只是需要转换为用户控件类型
Type pageType = uc.GetType();
MethodInfo nMethod = pageType.GetMethod("BindData");
nMethod.Invoke(uc, null);
用后置代码中如何引用用户控件?
如在页面中有一个用户控件。
<usercontrol:control id=control runat=server/>
它有一个属性。showinfo.是字符串类型的。
现在问题是怎么在后置的代码中给showinfo会值。
直接在你想的地方(一定要在声明了这个控件之后哦)
control1.showinfo="这是你想要的字符串";
{
get { return Year.Text; }
set { Year.Text = value; }
}
Year是用户控件中TextBox控件的ID;这样就可以直接在页面(test.aspx)中进行year属性的取值和赋值,如:
string year = UC.year.ToString();
UC.year = "2010";
其中UC是用户控件在页面(test.aspx)中的ID值。
{
using
using
using
using
using
using
public
{
protected
{
public
{
get
}
set
{
TextBox1.Text
}
}
}
}
调用页面代码:
using
using
using
using
using
using
using
namespace
public
System.Web.UI.Page
{
protected
protected
private
{
}
private
{
Response.Write(UserControl1.Text);
}
}
}
原文地址:http://cache.baidu.com/c?m=9f65cb4a8c8507ed4fece763