[英]How to pass value from user control to aspx page on pageload?
場景非常簡單。 我有一個帶用戶控件的aspx頁面。 我想設置一個值,並從aspx頁面的頁面加載上的usercontrol獲得響應。 SET作業已完成,但無法獲取響應。 它總是空的。 我嘗試了兩種方法,但沒有一種有效。
ASPX頁面
<uc1:ucContent ID="Content1" runat="server" />
后面的代碼
protected void Page_Load(object sender, EventArgs e)
{
// SET job is working without any problem
Content1.ItemName = "X";
//METHOD ONE:
Page.Title = Content1.MetaPageTitle;
//METHOD TWO:
HiddenField hdnPageTitle = (HiddenField)Content1.FindControl("hdnMetaPageTitle");
Page.Title = hdnPageTitle.Value;
}
用戶控制
protected void Page_Load(object sender, EventArgs e)
{
if (string.IsNullOrEmpty(itemName))
{
// GET DATA FROM DB
// METHOD ONE:
hdnTitle.Value = DB.DATA;
// METHOD TWO:
metaPageTitle = DB.DATA;
}
}
private string metaPageTitle;
public string MetaPageTitle
{
// METHOD ONE:
get { return metaPageTitle; }
// METHOD TWO:
get { return hdnTitle.value; }
}
編輯
itemName是一個UserControl屬性,用於從父頁面獲取值:
private string itemName;
public string ItemName
{
set { itemName = value; }
}
感謝您的提前幫助!
我認為問題在於page
的Page_Load
是在UserControl
之前觸發的(看看: asp.net:與控件內部的用戶控件相比,控件/頁面的頁面生命周期順序是多少? )。
因此,您可以在Page_init
設置屬性:
在您的UserControl
:
protected void Page_Init(object sender, EventArgs e)
{
if (string.IsNullOrEmpty(itemName))
{
// GET DATA FROM DB
hdnTitle.Value = DB.DATA;
}
}
現在,這應該可以在您頁面的Page_Load
:
Page.Title = Content1.MetaPageTitle;
通常,我希望在Page和UserControl之間進行另一種通信。 這稱為事件驅動的通信,這意味着當MetaPageTitle
更改時(因此在適當的事件處理程序中),您應該在UC中觸發自定義事件。
然后頁面可以處理此特定事件並做出相應反應。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.