在.ascx文件中刷新内容

时间:2009-08-24 19:14:27

标签: asp.net ascx

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

例如(伪代码):

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

Sub Button_Click
    SaveStuff()
    ReRenderUserControl()
End Sub

3 个答案:

答案 0 :(得分:4)

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

用户控件:

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

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

致电Page:

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

答案 1 :(得分:3)

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

  • 在您的用户控件中,转到数据存储并返回其加载事件或任何其他正确事件(控件的数据绑定等)所需的信息。
  • 在您的包含的页面加载中 页面,为值的属性赋值 您在其中使用的UserControl 用户的不同方面 控制。这些价值观可能来临 来自数据存储或查询字符串或 不管。

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

答案 2 :(得分:2)

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

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