这是个坏主意。用户控件应该是自包含的,并且不知道他们的环境。想想网格视图。
aspx
<asp:GridView runat="server" id="GridView1" />
<asp:GridView runat="server" id="GridView2" />
代码背后
protected void Page_Load(object sender, EventArgs e)
{
if(!IsPostBack)
{
DataTable dt = Database.GetDataTable();
GridView1.DataSource = dt;
GridView2.DataSoure = dt;
GridView1.DataBind();
GridView2.DataBind();
}
}
GridView 不会从 Session 中提取数据,你也不应该!相反,在您的用户控件中设置一个属性来传递数据。
如果数据仅在当前页面之外具有相关性,那么您可能将其存储在会话中,但用户控件不应从会话中提取数据,您的页面应从会话中提取数据并将其传递给用户控件
if(Session["ImportantData"] == null)
{
Session[ImportantData] = Database.GetImportantData();
}
MyUserControl1.Data = Session["ImportantData"] as ImportantDataClass;
MyUserControl2.Data = Session["ImportantData"] as ImportantDataClass;
响应您的编辑...
var personalizationService = new PersonalizationService();
MyUserControl1.PersonalizationService = personalizationService;
MyUserControl2.PersonalizationService = personalizationService;
顺便说一句,你不应该这样做new PersonalizationService(); 理想情况下,你应该从依赖注入中获得它,这样你就可以从一个集中位置换出实现。我倾向于使用Ninject,它可以做属性注入。
[Ninject]
public IPersonalizationService personalizationService {get; set;}
protected void Page_Load(object sender, EventArgs e)
{
MyUserControl1.PersonalizationService = personalizationService;
}