2009-08-24 32 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