3

因为 .ascx 文件在页面生命周期的早期自然呈现,如果我想更新 .ascx 部分之外的表单上的信息,我如何刷新 .ascx 文件以反映更改,比如单击按钮(保存信息的同一个)?

例如(伪代码):

Sub Page_load
    'user control is naturally rendered here'
End Sub

Sub Button_Click
    SaveStuff()
    ReRenderUserControl()
End Sub
4

3 回答 3

4

如果您正在创建基于保存的数据构建的用户控件。您可以做的是创建一个执行该构建的方法,然后在页面和用户控件(伪代码)中调用它:

用户控制:

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();    
}
于 2009-08-24T19:52:52.917 回答
3

正如您所提到的,用户控件(.ascx 文件)在包含页面的生命周期中呈现。当您在包含页面上单击回发按钮时,回发加载后,用户控件将完全重新呈现。如果您要求用户控件在此加载时包含不同的信息,您可以做很多事情:

  • 在您的用户控件中,转到数据存储并返回其加载事件或任何其他适当事件(控件的数据绑定等)期间所需的信息
  • 在包含页面的页面加载中,将值分配给您在用户控件的不同方面使用的用户控件的属性。这些值可能来自数据存储或查询字符串或其他任何东西。

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

于 2009-08-24T19:42:24.530 回答
2

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

如果有人有更优雅的解决方案,请告诉我!

于 2009-08-24T19:53:26.207 回答