2009-08-24 120 views
3

由于.ascx文件在页面生命周期的早期自然呈现,如果我想更新.ascx部分外部的表单上的信息,如何刷新.ascx文件以反映这些变化,说按钮点击(保存信息的同一个)?刷新.ascx文件中的内容

例如(伪):

​​

回答

3

如果您正在根据保存的数据创建正在构建的用户控件。你可以做的是创建一个具有该建筑物的方法,然后将网页和用户控件中调用它(伪):

用户控件:

protected Page_Load(object sender, EventArgs e) 
{ 
    BuildControlBasedOnData(); 
} 

public BuildControlBasedOnData() 
{ 
    // Build the user control based on saved data 
} 

调用页面:

Button_Click(object sender, EventArgs e) 
{ 
    UserControl1.BuildControlBasedOnData();  
} 
3

用户控件(.ascx文件)包含页面生命周期中呈现,就像你提到。当你做一个按钮点击包含页面上的回发时,在回发加载时,用户控件将被完全重新渲染。如果您需要的用户控件包含在此负载不同的信息有很多事情可以做:

  • 在用户控件,去一个数据存储和恢复其负载事件或任何其它适当过程中所需的信息事件(控件的数据绑定等)
  • 在你含 页的页面加载,将值分配给你内的用户 控制的 不同方面使用 你的用户控件的属性。这些值可能来自数据存储或查询字符串 或 。

还有很多其他选项。如果您正在讨论部分回发或AJAXy类型的东西,那么您可能必须使用JavaScript来更新用户控件的不同部分(除非您使用UpdatePanel,而不应该因为它们是恶魔) 。

+0

这不会告诉我如何在信息被保存在page_load函数之外后重新呈现用户控件... – Jason 2009-08-24 19:45:28

2

我提出了我认为是不完善但可用的解决方案。我所做的只是在我的.ascx文件Public中创建Page_Load函数,然后在保存信息后调用它。这照顾了我的问题。

如果有人有更优雅的解决方案,请让我知道!

+1

您不应该这样做。正如Phairoh在上面提到的,用户控件遵循包含页面的页面生命周期。在呈现之前,您可以公开显示修改用户控件的公共属性和方法。 – CAbbott 2009-08-24 20:01:03

+0

我会创建一个名为'ReRender'的公共方法,它只是调用'Page_load'函数吗? – Jason 2009-08-24 20:12:01

+0

我修改了我的答案,以解决我相信你正在努力完成的任务。它基本上是用户控件中的一个公共方法,可以调用该方法来重建控件,但是您需要。 – CAbbott 2009-08-24 20:19:46