因为 .ascx 文件在页面生命周期的早期自然呈现,如果我想更新 .ascx 部分之外的表单上的信息,我如何刷新 .ascx 文件以反映更改,比如单击按钮(保存信息的同一个)?
例如(伪代码):
Sub Page_load
'user control is naturally rendered here'
End Sub
Sub Button_Click
SaveStuff()
ReRenderUserControl()
End Sub
如果您正在创建基于保存的数据构建的用户控件。您可以做的是创建一个执行该构建的方法,然后在页面和用户控件(伪代码)中调用它:
用户控制:
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();
}
正如您所提到的,用户控件(.ascx 文件)在包含页面的生命周期中呈现。当您在包含页面上单击回发按钮时,回发加载后,用户控件将完全重新呈现。如果您要求用户控件在此加载时包含不同的信息,您可以做很多事情:
还有很多其他选择。如果您谈论的是部分回发或 AJAXy 类型的东西,那么您可能必须使用 JavaScript 来更新用户控件的不同部分(除非您使用的是 UpdatePanel,您不应该这样做,因为它们是魔鬼) .
我想出了一个我认为不完美但可用的解决方案。我所做的只是Page_Load
在我的 .ascx 文件中创建函数,Public
然后在保存我的信息后调用它。这解决了我的问题。
如果有人有更优雅的解决方案,请告诉我!