尽管.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" });如果有参数

 

     如果是控件之间传值,可以使用下列方法:

 

Page nPage = this.Parent.Page;
UserControl uc
= nPage.FindControl("TempletList1") as UserControl;//只是需要转换为用户控件类型
Type pageType = uc.GetType();
MethodInfo nMethod
= pageType.GetMethod("BindData");
nMethod.Invoke(uc,
null);
 
原文地址:http://www.cnblogs.com/yank/archive/2008/10/20/1315059.html
 
 
——————————————————————————————————————————
问:
用后置代码中如何引用用户控件?
如在页面中有一个用户控件。
<usercontrol:control id=control runat=server/>
它有一个属性。showinfo.是字符串类型的。
现在问题是怎么在后置的代码中给showinfo会值。
 
答2:
直接在你想的地方(一定要在声明了这个控件之后哦)
control1.showinfo="这是你想要的字符串";
 
 
 
 
——————————————————————————————————————————
在用户控件(UC.ascx)中设置属性,如:public string year
 {
 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值。
 
 
 
 
——————————————————————————————————————————
namespace temp3

using System; 
using System.Data; 
using System.Drawing; 
using System.Web; 
using System.Web.UI.WebControls; 
using System.Web.UI.HtmlControls;
 ///  ///  test 的摘要说明。 ///  
public class test System.Web.UI.UserControl 
 
protected System.Web.UI.WebControls.TextBox TextBox1;   
 private void Page_Load(object sender, System.EventArgs e)  
  // 在此处放置用户代码以初始化页面   
public string Text  
  
get  
   
 return TextBox1.Text;   
  
set   
   
TextBox1.Text value;   
 

}
}

调用页面代码:
using System;
using System.Collections;
using System.ComponentModel;
using System.Data;
using System.Drawing;using System.Web;
using System.Web.SessionState;
using System.Web.UI;using System.Web.UI.WebControls;using System.Web.UI.HtmlControls;
namespace temp3{ ///  /// usercon 的摘要说明。 ///  
public class usercon 
System.Web.UI.Page 
 
protected System.Web.UI.WebControls.Button Button1;  
protected temp3.test UserControl1; //注意: 此处需要实例化下用户控件,否则会出现未实例化的错误  
private void Page_Load(object sender, System.EventArgs e)  
  // 在此处放置用户代码以初始化页面  
 
private void Button1_Click(object sender, System.EventArgs e)  
  
Response.Write(UserControl1.Text);  

}
}

原文地址:http://cache.baidu.com/c?m=9f65cb4a8c8507ed4fece7631046893b4c4380147e9d895368d4e419ce3b46120720b8ea79750704a4963d2516ae3d07bce7370437022aa3de95c81cd2ace22238fc2d23716c913713c468aedc3655d653954de8df0e97cee74499b9a2a2c82024dd52756df0f69c297003cb1fe76235f4d69e&p=ce33dc16d9c611a05be685655957&user=baidu
posted on 2011-07-21 14:41  伤寒泪  阅读(324)  评论(0编辑  收藏  举报